for循环中的变量扩展

时间:2016-11-07 14:19:37

标签: batch-file variables for-loop expansion

我知道这是一个常见问题,但我无法解读其他问题中的答案和建议,以使我的特定脚本有效。

@echo on
setlocal EnableDelayedExpansion

set directory=%1
set file_list=%2

for /f "tokens=*" %%i in (%file_list%) DO (
set newName=!%%i:~0,5!
move "%directory%\%%i" "%directory%\!%newName%!s.jpg" )

endlocal

这给了我这个带有echo on

的输出
set newName=!image.png:~0,5!  
move "\\server\path\to\image.png" "\\server\path\to\!!s.jpg"

很明显newName在我需要时为null,所以在尝试将其剪切为5个字符时,我甚至无法解决最可能的语法问题。

谢谢!

1 个答案:

答案 0 :(得分:1)

set "newName=%%i"
set "newName=!Newname:~0,5!"

您不能像metavariable那样对%%i进行子串。您需要将其分配给标准环境变量,然后使用指示的方法(delayedexpansion模式中的!var...!子串,因为在代码块中需要更改变量值)

引号只是界定所涉及的字符串,以确保不包括该行上任何不可见的杂散空格。