2016-11-07 187 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模式)

引號簡單地限定參與,以確保字符串中使用指示的方法串線上的任何看不見的雜散空間都不包括在內。