我想使用批处理脚本自动执行某些操作,我必须做的一件事就是用当前日期替换文件上的日期。我试着做点什么,但是就像我的文件行是空的......
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文件)。
有人可以帮帮我吗?
答案 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文章。