【发布时间】:2020-07-08 16:49:30
【问题描述】:
好的。这是一个自我更新的批处理文件。我只是从一个更大的文件中简化了问题。
这是一个 Windows 批处理文件 (.bat),在执行时应自行打开并更新第一行
SET variableName=D:\Data
setlocal enableextensions enabledelayedexpansion
set /A i=0
for /f "tokens=*" %%f in ('type "%0"^&cd.^>"%0"') do (
set /A i=!i!+1
if !i! EQU 1 (
echo SET variableName=D:\Data2>>%0
) else (
echo %%f>>%0
)
)
endlocal
所以让我们解释一下情况。 我在 5 和 6 行中有 !i! 变量。执行此文件后,每行中的变量将替换为行号。这显然是因为 echo %%f>>%0 无法忽略和转义变量。 我的问题是如何解决这个问题? 另一个较小的问题是上面的代码忽略了行首的空格(缩进)并生成一个平面文件。 执行这个文件的结果是:
SET variableName=D:\Data2
setlocal enableextensions enabledelayedexpansion
set /A i=0
for /f "tokens=*" %%f in ('type "%0"^&cd.^>"%0"') do (
set /A i=5+1
if 6 EQU 1 (
echo SET variableName=D:\Data2>>%0
) else (
echo %%f>>%0
)
)
endlocal
【问题讨论】:
标签: batch-file