2017-08-11 10 views
0

if文をループして ループ内で動作させるのに苦労しています。どんな助けもありがとう。forループで動作しないif文が

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

ワイルドカードパターンだけではなく*.txtとして"ProjectLoad_Refresh_%today%*.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

関連する問題