2017-08-11 116 views
0

我很難讓if語句在 循環內工作。任何幫助,將不勝感激。批處理語句不工作for循環

for %%i in (*.txt) do (
set filename=%%i 
set filenametrunc=!filename:~0,28! 
If %filename:~0,28%==ProjectLoad_Refresh_%today% (
Set fileName=%filenametrunc% 
) 
) 
+3

繼續使用'引用變量!',而不是''%例如在''SETLOCAL EnableDelayedExpansion''(https://ss64.com/nt/delayedexpansion.html)範圍內的'!filename:〜0,28!'和'!filenametrunc!'。 – JosefZ

+0

我試着用%替換!在if語句中,它不能和SETLOCAL EnabledDelayedExpansion一起使用。 – yangk1351

回答

0

我真的不明白爲什麼不使用"ProjectLoad_Refresh_%today%*.txt"作爲通配符模式,而不是僅僅*.txt,但是這個代碼應該工作:

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 
set "Today=2017-08-11" 
for %%I in (*.txt) do (
    set "FileName=%%I" 
    set "TruncatedName=!FileName:~0,28!" 
    if "!TruncatedName!" == "ProjectLoad_Refresh_%Today%" set "FileName=!TruncatedName!" 
) 
endlocal 

有一個例外:文件名中含有1個或多個驚歎號分數。

爲了解所使用的命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀爲每個命令顯示的所有幫助頁面。

  • echo /?
  • endlocal /?
  • for /?
  • if /?
  • set /?
  • setlocal /?
+0

謝謝你的解釋。這工作正常。我會看看這些命令,謝謝你的建議。 – yangk1351