批处理FOR / F和文件/路径名中的空格以及令牌的用法?

时间:2012-01-09 11:32:25

标签: svn batch-file svnlook

我正在使用批处理文件来仅更新我的SVN存储库中已更改的那些文件。这是我的批处理文件的一部分:

SET CHANGES=svnlook changed c:\myrepository
FOR /F "usebackq tokens=2" %%a IN (`%CHANGES%`) DO (echo %%a)

我只获得 dok 而不是 dok version1.txt ,我猜这是因为空间。即使有空格,我如何更改代码以获取文件名?那是因为代币还是它的名字在哪里?

svnlook的输出如下:

D Testprojekt / trunk / dok - Kopie(2).txt
D Testprojekt / trunk / dok - Kopie(3).txt
D Testprojekt / trunk / dok - Kopie(4).txt

所以我使用tokens = 2来获取路径(Testprojekt / trunk / dok - Kopie(2).txt)而不是动作(例如D =删除)。

谢谢!

2 个答案:

答案 0 :(得分:3)

尝试使用:

FOR /F "usebackq tokens=1,*" %%a IN (`%CHANGES%`) DO (echo %%b)

这会将第一个标记分配给%a,将所有后续标记分配给下一个字母,即%b

答案 1 :(得分:2)

使用此输出:

D Testprojekt/trunk/dok - Kopie (2).txt
D Testprojekt/trunk/dok - Kopie (3).txt
D Testprojekt/trunk/dok - Kopie (4).txt

...你可以试试这个:

FOR /F "usebackq tokens=1*" %%a IN (`%CHANGES%`) DO (
    echo %%b
)

tokens=1*位表示:

  1. 将第一个令牌存储到%% a(即D
  2. 将该行的其余部分存储到%% b