批量窗口 - 读取文件和修改行

时间:2014-05-13 09:23:44

标签: batch-file

我想使用批处理脚本自动执行某些操作,我必须做的一件事就是用当前日期替换文件上的日期。我试着做点什么,但是就像我的文件行是空的......

SET planningFile=<My file with full path>

set mydate=%date:~6,4%%date:~3,2%%date:~0,2%

FOR /F %%i IN ('TYPE "%planningFile%"') DO (
    SET str=%%i
    SET str=%str:~8,%
    ECHO %mydate%%srt% > "%planningFile%~"
)
DEL "%planningFile%"
RENAME "%planningFile%~" "%planningFile%"

该文件的一行看起来像20140513;54;aaaa:54(CSV文件)。 有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

在块语句(a parenthesised series of statements)中,解析整个块并执行然后。块中的任何%var%将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于FOR ... DO (block)。< / p>

因此,IF (something) else (somethingelse)将在遇到%variables%时使用IF的值执行。

解决此问题的两种常见方法是1)使用setlocal enabledelayedexpansion并使用!var!代替%var%来访问已更改的var或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。

因此

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F %%i IN ('TYPE "%planningFile%"') DO (
    SET "str=%%i"
    SET "str=!str:~8!"
    ECHO %mydate%!sTR! > "%planningFile%~"
)

注意: - 你的行有'ECHO ...%srt%....

>如果您希望附加而不是重新创建文件<{1}},则应为>>

有关数百个示例,请参阅delayedexpansion上的任意数量的SO文章。