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

时间:2019-01-11 21:51:07

标签: batch-file for-loop

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

由于我是批处理脚本的新手,所以我可能犯了一个很明显的错误。

谢谢。

1 个答案:

答案 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
    )
)