1

我有一个文本文件 datefile.txt 包含

10-06-2013

我尝试使用以下 bat 文件读取它:

@echo off
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ datefile.txt"`) do (
    set "var=%%a"
    SETLOCAL EnableDelayedExpansion
    set "var=!var:*:=!"
    echo(!var!
    ENDLOCAL
)
echo %var%

我得到的输出是这些:

10/06/2013
1:10/06/2013

为什么我的 %var% 与上面的不同。或者我怎样才能删除 %var% 中的“1:”?

谢谢。

4

2 回答 2

2

你得到了这种类型的输出,因为第一行是由echo(!var!.
第二行由echo %var%,但在第二种情况下,变量不包含相同的内容。

这是因为 for 循环内的 Setlocal/endlocal 块。

在您的情况下,您可以简单地删除该块,因为您的日期不包含任何感叹号或插入符号。

@echo off
SETLOCAL EnableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ datefile.txt"`) do (
    set "var=%%a"
    set "var=!var:*:=!"
    echo(!var!
)
echo %var%

如果您的文件仅包含一行,则解决方案可以简化为

<datefile.tx set /p var=
echo %var%
于 2013-10-06T20:42:42.053 回答
0

解决方案是使用 dos substr 替换删除“1:”:

http://www.dostips.com/DtTipsStringOperations.php#Snippets.Remove

于 2013-10-06T17:02:36.627 回答