从读取[批处理文件]的命令中消失的第一个字符



我正在尝试读取一个命令的输出(它输出到多行),并使用任意数量的这些行。因为我既不知道总行数,也不知道将要使用的行数,所以我需要分析并可能在循环中使用每一行,这就是为什么我有setlocal enabledelayedexpansion

下面是一段代码片段,显示了接受命令并读取每一行的过程(还没有使用它,只是读取它以确保它有效(但它没有)):

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('svn status') do (
echo %%i
set file=%%i
echo *!file!
)

我遇到的问题是,正在读入的%%i值在for行中不正确。输入的第一行缺少第一个字符(这很重要,因为我使用第一行来决定是否使用该行)。

我从代码中得到的输出如下:

Dir0TestDoc7.txt
?       StatusFile.txt

而如果我运行此代码:

copy /y NUL StatusFile.txt >NUL
>StatusFile.txt (
svn status
)

(这只是我看到svn status实际输出的另一种方式)我在文本文件中得到了一个正确的输出:

!       Dir0TestDoc7.txt
?       StatusFile.txt

我可能犯了一个相当明显的错误,因为我对批处理脚本还很陌生。

提前谢谢。

原因是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
)
)

最新更新