我有以下简单的批处理文件,用于重命名 *.txt 文件并删除前 x 个字符
@Echo Off
for %%i in ("*.txt") do (
set fname=%%i
echo %fname%
copy %fname% %fname:~9%
)
但是,它只处理最后一个文件?如果我有 4 个文件,最后一个文件也会被复制 4 次?
我需要做什么?
我有以下简单的批处理文件,用于重命名 *.txt 文件并删除前 x 个字符
@Echo Off
for %%i in ("*.txt") do (
set fname=%%i
echo %fname%
copy %fname% %fname:~9%
)
但是,它只处理最后一个文件?如果我有 4 个文件,最后一个文件也会被复制 4 次?
我需要做什么?
问题是 %var% 在第一次解析循环时被变量的值替换,并且在执行期间不会改变。
这是一个可以让您修复代码的演示:
@ECHO off&setlocal&CLS
ECHO Demonstrating the use of %%var%% IN a block
ECHO.
SET var=Original value
ECHO Before the block, %%var%%=%var%
FOR %%i IN (1 2 3) DO (
SET var=New value %%i
ECHO loop %%i : %%var%%=%var%
)
ECHO After the block, %%var%%=%var%
ECHO.
ECHO BECAUSE the block is first PARSED, then executed.
ECHO in the parsing process, %%var%% is replaced by its
ECHO value as it stood when the block was parsed - BEFORE execution
ECHO.
ECHO now try using a SETLOCAL ENABLEDELAYEDEXPANSION command first:
ECHO.
SETLOCAL ENABLEDELAYEDEXPANSION
SET var=Original value
ECHO Before the block, %%var%%=%var% and ^^!var^^!=!var!
FOR %%i IN (1 2 3) DO (
SET var=New value %%i
ECHO loop %%i : %%var%%=%var% BUT ^^!var^^!=!var!
)
ECHO After the block, %%var%%=%var% and ^^!var^^!=!var!
ECHO.
哦,这么多插入符号!一个不识字的兔子的天堂。
插入符号 ( ^) “转义”后面的字符的特殊含义 - 除了%被另一个%
So 转义 - 在行中
ECHO Before the block, %%var%%=%var%
回显的是“Before the block”,然后是一个单曲%,文本var,另一个单曲%,=和the value of var
SETLOCAL ENABLEDELAYEDEXPANSION字符!变成特殊字符后。所以
ECHO Before the block, %%var%%=%var% and ^^!var^^!=!var!
或者
ECHO loop %%i : %%var%%=%var% BUT ^^!var^^!=!var!
附加一个 single !、 string var、另一个 single!和=,the run-time value of var因为在 PARSE 时,^^被替换为,然后在 EXECUTION 时^将结果^!解释为文字!。在!var!PARSE 时保持不变,但被var执行时的值替换。