我正在尝试读取命令的输出(输出到多行),并使用任意数量的这些行。因为我既不知道总行数,也不知道将要使用的行数,所以我需要分析并可能在循环中使用每一行,这就是为什么我有setlocal enabledelayedexpansion
的原因。
下面的代码片段显示了获取命令并读取每一行的过程(尚未使用它,只是阅读它以确保它起作用(不起作用)):
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('svn status') do (
echo %%i
set file=%%i
echo *!file!
)
我遇到的问题是,正在读入的%%i
值在for
行中不正确。输入的第一行中缺少第一个字符(这很重要,因为我使用第一行来决定是否使用该行)。
我从代码中获得的输出如下:
Dir0\TestDoc7.txt ? StatusFile.txt
如果我运行此代码:
copy /y NUL StatusFile.txt >NUL
>StatusFile.txt (
svn status
)
(这是我了解svn status
实际输出的另一种方式),我在文本文件中得到了正确的输出:
! Dir0\TestDoc7.txt ? StatusFile.txt
由于我是批处理脚本的新手,所以我可能犯了一个很明显的错误。
谢谢。
答案 0 :(得分:0)
原因是EnableDelayedExpansion,它将吃掉感叹号,
您选择的tokens=*
还将删除行中的所有前导空格。
@echo off
for /f "tokens=1*" %%A in ('svn status') do (
if "%%A" equ "!" (
Rem do whatever
) else If "%%A" equ "?" (
Rem do something else rest of the line is in %%B
) else (
Rem no ! or ? first space sep. content is in %%A rest of the line is in %%B
)
)