Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmd 任元';I don’我不使用上面一个lina中的变量_Cmd - Fatal编程技术网

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”

谢谢您的解释,这确实有助于我理解这个问题。