Dan*_*ett 2 cmd batch-file 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
Run Code Online (Sandbox Code Playgroud)
根据此,前5列是1个字符宽.
如何只将文件名输出到文本文件?这就是我所拥有的:
for /F "tokens=2*" %%U in ('svn status C:\SVN-EDGE') do echo %%U
Run Code Online (Sandbox Code Playgroud)
但是一旦它命中文件名中的空格,它就会停止回显.如果我将其更改为do echo %%U %%V,我会得到正确的输出.
这是正确的方法吗?我一直在乱用代币和delims一段时间了.
谢谢!
* 分配一个新变量.
映射令牌1 %%A然后只是忽略它并使用%%B
for /F "tokens=1*" %%A in ('svn status C:\SVN-EDGE') do echo %%B
Run Code Online (Sandbox Code Playgroud)
with 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!
)
Run Code Online (Sandbox Code Playgroud)
运行set /?有关延迟扩展和变量操作的更多信息.