2017-08-11 8 views
0

に罰金作品すべてのファイル* .gscを削除し、その文字列を含まない行を削除します。Windowsのバッチ:ダブルクリック間違った行動 - 質問は、私はそれをしたし、このスクリプトは私がプロンプトに移動し、FILE.BATを呼び出す場合、取得細かい実行されている</p> <p>を働いていないEXACTLYということですプロンプト

しかし、ダブルクリックしたときに期待通りに動作せず、実行するたびに最初のファイルも削除され、残りのファイルは消去されませんでした。 :\

@echo off 
set "string_to_find=level.waypoints\[" 
for /f "tokens=*" %%a in ('dir /B *.gsc') do (
      set "tempfile=%temp%\%%a" 
      if exist "%tempfile%" del "%tempfile%" >NUL 
      findstr /C:"%string_to_find%" "%~dp0\%%a" >> "%tempfile%" 
      if not errorlevel 1 (
         del "%%a" >NUL 
         move /Y "%tempfile%" "%~dp0\%%a" >NUL 
         if exist "%tempfile%" del "%tempfile%" >NUL 
         echo File "%~dp0\%%a" processed successfully 
      ) else (
      echo Problem processing file "%~dp0\%%a" 
      ) 
) 

私はすでに

setlocal enableDelayedExpansion 

を使用し、またためVARSを置き換えるためにしようと試みました "!" "%"の代わりに、私は何か間違っています...私は私がダブルクリックでもこの仕事をするために変更する必要があるものを指すのを助けることができますか?

ありがとうございました!

+4

可能な複製([バッチ文はforループで動作しない場合] https://stackoverflow.com/questions/45638465/batch-if-statement-not-作業中のループ) – JosefZ

+0

私の質問は、私はそれを試して働いていないと言っていました、何か間違っています...重複しません。問題は持続する。 – Hajas

+0

バッチファイルもコマンドプロンプトウィンドウから実際に実行されないため、重複しています。バッチファイルの最初の実行時に、 '%tempfile%'のすべての出現は、__FOR__コマンドを実行する前に何も置き換えられません。同じコマンドプロンプトウィンドウでバッチファイルの2回目の実行時に、この環境変数のために、最初の2回目のバッチファイル実行時に__FOR__コマンドを実行する前に、前のバッチファイル実行から最後のループ実行時に割り当てられた最後の値で置き換えられます以前のバッチファイルの実行からは依然として存在します。 – Mofi

答えて

0

まあ、何時間ものtryesの後、私はついにそれを今ダブルクリックで動作させます。ここでは、最終的なコード:

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 
set "string_to_find=level.waypoints\[" 
for /f "tokens=*" %%a in ('dir /B *.gsc') do (
      set "tempfile=!temp!\%%a" 
      if exist "!tempfile!" del "!tempfile!" >NUL 
      findstr /C:"!string_to_find!" "%~dp0\%%a" >> "!tempfile!" 
      if not errorlevel 1 (
         del "%%a" >NUL 
         move /Y "!tempfile!" "%~dp0\%%a" >NUL 
         if exist "!tempfile!" del "!tempfile!" >NUL 
         echo File "%~dp0\%%a" processed successfully 
      ) else (
      echo Problem processing file "%~dp0\%%a" 
      ) 
) 

歓声

+0

名前に感嘆符を含むGSCファイルでは失敗します。 – treintje

+3

'delayedexpansion'のポイントは、ブロック内で' var'の値が変更される(通常 'for'ループの本体)と' varの '* new *値が変更される* 'が必要です。 '%var%'は* 'for' *に達すると常に' var' *の値に置き換えられます*。したがって、あなたの 'for'ループで' tempfile'だけが変更されているので、 '%tempfile%'だけを '!tempfile!'に変更する必要があります。ループ内では 'temp'と' string_to_find'は*変更されていないので、 '%var%'のままであったかもしれません。 – Magoo

+1

'%〜dp0 %% a 'は'%〜dp0 %% a'と書いたほうが、 '%〜dp0'は常にバックスラッシュで終わる引数0(バッチファイルパス)のドライブとパスに展開されるためです。ディレクトリとファイルへのアクセスのためのWindowsカーネル関数は、ディレクトリ/ファイルパスの '' \\ ''には何の問題もありませんが、パス内の2つの連続したディレクトリセパレータの使用は避けてください。 – Mofi

関連する問題

 関連する問題