2016-11-07 147 views
-2

我知道这是一个常见问题,但我无法解释其他问题中的答案和建议,以使我的特定脚本能够正常工作。for循环内部的变量扩展

@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 

这是给我回音此输出上

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

所以很明显了newName为空,当我需要它,所以我不能甚至开始排查最有可能的语法问题,努力当将它剪成5个字符。

谢谢!

+3

嗨,亚当,你有没有看到在互联网或StackOverFlow的一些地方的例子,说你可以子串一个FOR变量?只是想确保StackOverFlow上没有任何我们应该照顾的不好的答案。 – Squashman

回答

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

不能串一个metavariable%%i。您需要将其分配给一个标准的环境变量,则(因为变量的改变的值是一个代码块中所需!var...!在delayedexpansion模式)

引号简单地限定参与,以确保字符串中使用指示的方法串线上的任何看不见的杂散空间都不包括在内。