我想生成一个文件,其中包含目录中所有文件的相对路径。到目前为止,我有这个批处理文件:
@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
答案 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
来获取具有相对路径的文件列表。 delims
和tokens
子句将从每行的开头删除初始.\
,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
您需要当前目录的长度来执行子字符串操作。