枚举目录中文件的相对路径

时间:2015-05-10 11:34:39

标签: windows batch-file

我想生成一个文件,其中包含目录中所有文件的相对路径。到目前为止,我有这个批处理文件:

@echo off
for /R  "C:\TEST" %%f in (*) do echo %%f

它的输出是:

C:\TEST\linux.txt
C:\TEST\riddles.txt
C:\TEST\one\limerick.txt
C:\TEST\two\art.txt
C:\TEST\two\computers.txt

我希望输出为:

linux.txt
riddles.txt
one\limerick.txt
two\art.txt
two\computers.txt

2 个答案:

答案 0 :(得分:2)

您可以尝试使用

@echo off
    setlocal enableextensions disabledelayedexpansion

    pushd "c:\test"
    for /f "tokens=* delims=\." %%a in ('
        xcopy /l /s ".\*" "%temp%" ^| find "."
    ') do echo %%a
    popd 

这使用xcopy来获取具有相对路径的文件列表。 delimstokens子句将从每行的开头删除初始.\find命令将丢弃xcopy输出中的最后一行它显示了文件数。

答案 1 :(得分:0)

@echo off

setlocal enableDelayedExpansion
set "pd=C:\TEST"
pushd "%pd%"
call :strlen __cd__ clen
rem echo %clen%
for /R  "%pd%" %%f in (*) do (
 set "dirp=%%~ff"
 echo !dirp:~%clen%!
)



exit /b 0


:strlen  StrVar  [RtnVar]
  setlocal EnableDelayedExpansion
  set "s=#!%~1!"
  set "len=0"
  for %%N in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
    if "!s:~%%N,1!" neq "" (
      set /a "len+=%%N"
      set "s=!s:~%%N!"
    )
  )
  endlocal&if "%~2" neq "" (set %~2=%len%) else echo %len%
exit /b

您需要当前目录的长度来执行子字符串操作。