пакет FOR / F и пробел в файле / pathname и использование токена? - PullRequest
2 голосов
/ 09 января 2012

Я использую командный файл для обновления только тех файлов, которые изменились в моем хранилище 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

Поэтому я использую токены = 2 только для полученияпуть (Testprojekt / trunk / dok - Kopie (2) .txt), а не действие (например, D = удалено).

Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 января 2012

Попробуйте использовать:

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

Это присваивает первый токен% a, а все последующие - следующей букве, т.е.% b

2 голосов
/ 09 января 2012

С этим выводом:

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. Storeпервый токен в %% a (т.е. D)
  2. Сохраните остаток строки в %% b
...