2

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

据此前 5 列是 1 个字符宽。

如何仅将文件名输出到文本文件?这就是我所拥有的:

for /F "tokens=2*" %%U in ('svn status C:\SVN-EDGE') do echo %%U

但是,一旦它在文件名中出现空格,它就会停止回显。如果我将其更改为do echo %%U %%V,我会得到正确的输出。

这是正确的方法吗?一段时间以来,我一直在搞乱令牌和分隔符。

谢谢!

4

1 回答 1

7

*分配一个新变量。

将令牌 1 映射到%%A然后忽略它并使用%%B

for /F "tokens=1*" %%A in ('svn status C:\SVN-EDGE') do echo %%B

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

于 2013-01-12T17:24:22.163 回答