命令svn status
返回类似于:
? SomeClient\BUTCHERED.docx
M SomeClient\Development notes.txt
? SomeClient\Received\~$formation for prospective clients.docx
M SomeClient\Sales\Estimates.xlsx
M SomeClient\Sales\Specification.docx
? SomeClient\Sales\~$Estimates.xlsx
? SomeClient\Sales\~$ecification.docx
? SomeClient\removed.docx
? SomeClient\site spec1.docx
? SomeClient\~$TCHERED.docx
? SomeClient\~$emoved.docx
? SomeClient\~$te spec1.docx
根据this,前5列是1个字符宽。
如何仅将文件名输出到文本文件?这就是我所拥有的:
for /F "tokens=2*" %%U in ('svn status C:\SVN-EDGE') do echo %%U
但是一旦它命中文件名中的空格,它就会停止回显。如果我将其更改为do echo %%U %%V
,我会得到正确的输出。
这是正确的方法吗?我现在一直在乱用令牌和delims。
谢谢!
答案 0 :(得分:7)
*
分配一个新变量。
将令牌1映射到%%A
,然后忽略它并使用%%B
for /F "tokens=1*" %%A in ('svn status C:\SVN-EDGE') do echo %%B
tokens=2*
%%U
匹配令牌2,%%V
匹配*
如果第一部分的长度始终相同,您可以使用延迟子字符串跳过它:!line:~8!
setlocal EnableDelayedExpansion
for /f "delims=" %%a in ('svn status C:\SVN-EDGE') do (
set line=%%a
set line=!line:~8!
echo !line!
)
运行set /?
以获取有关延迟扩展和变量操作的更多信息。