Cmd 任元';I don’我不使用上面一个lina中的变量
我有一个奇怪的问题。我想重命名文件夹中的多个文件。 到目前为止,理论上很容易。我使用以下脚本:Cmd 任元';I don’我不使用上面一个lina中的变量,cmd,Cmd,我有一个奇怪的问题。我想重命名文件夹中的多个文件。 到目前为止,理论上很容易。我使用以下脚本: cd C:\Test for %%i in (*(7*) do ( set name="%%i" ren "%name%" "%name:~0,-15%.txt" ) pause 奇怪的是,他似乎没有使用我声明的变量“name” 在ren命令上方的一行,您可以在控制台打印的内容中看到: C:\Test>( set name=“ttttt(7xAAdoc).txt” ren“”“~
cd C:\Test
for %%i in (*(7*) do (
set name="%%i"
ren "%name%" "%name:~0,-15%.txt"
)
pause
奇怪的是,他似乎没有使用我声明的变量“name”
在ren命令上方的一行,您可以在控制台打印的内容中看到:
C:\Test>(
set name=“ttttt(7xAAdoc).txt”
ren“”“~0,-15.txt”
)
我错过了什么?我正在运行Windows7,如果这很重要的话
感谢您的帮助。在块语句
(一系列括号内的语句)
中,解析整个块,然后执行。在解析块时,块内的任何%var%
都将替换为该变量的值——在执行块之前——这同样适用于。。。DO(块)
因此,在遇到IF
时,将使用%variables%
的值执行IF(somethingelse)
克服此问题的两种常见方法是:1)使用setlocal enabledelayedexpansion
和!瓦尔
代替%var%
以访问var
的更改值,或2)调用子例程以使用更改的值执行进一步处理
就你而言
cd C:\Test
setlocal enabledelayedexpansion
for %%i in (*(7*) do (
set "name=%%i"
ren "%name%" "!name:~0,-15!.txt"
)
注意引号在第一个
集合中的位置。设置“var=value”
语法确保批处理行上的任何尾随空格不包括在分配给var
的值中。如您所知,name
将被分配一个“quoted”
值,ren
命令(如果它工作的话)将是“ren”“filename”“firstpartofilename.txt”谢谢您的解释,这确实有助于我理解这个问题。