如何在BAT中获取令牌2

时间:2013-01-12 15:44:52

标签: batch-file cmd token

命令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。

谢谢!

1 个答案:

答案 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 /?以获取有关延迟扩展和变量操作的更多信息。