2017-03-20 4 views
1

のファイルIは現在、ファイル「処理」のディレクトリを介してそれらを削除する前に、指定されたすべてのファイルに実行するスクリプトのセクション持っ除くディレクトリ内のすべてのファイル:ファイルのバッチファイル処理タイプ

​​

リストこの処理を必要とするファイルはほぼ毎週増えており、少数(.dll、* .exe、* .bat)以外のすべてのファイルを処理する方が簡単かもしれないと思う。

私はこの行を最初に置き換えようとした上記の例:

for %%x in (*.J_E, *.J_T, *.J_I, *.bcc) do (
0 ! - スクリプトを実行するバッチファイルを含む

for %%x in (*) do if not "%%x=="*.dll" if not "%%x"=="*.bat" if not "%%x"=="*.exe" (

が、私はこれを行うために管理することができ、すべてのディレクトリにあるすべてのものを削除している。これに

誰でも手助けできますか? 多くのありがとう

+0

この行の 'if'コマンドを見落としました:' "%% x" == "*。exe"( '!とにかく:** 1. **' for'コマンドは、あなたが文字列比較でワイルドカードを使うことができないので、意味がありません!ちょうど削除してください!そのような行と直接ファイルを処理する... – Aacini

答えて

2

あなたのifのコンストラクトは動作しません。バッチのifは非常に基本的です。 別の方法を使用してください:ファイルの拡張子をechoとし、findstrを使用して、文字列が指定されたもの(/v)でないかどうかを確認してください。含めることも除外天気を

for %%A in (*) do (
    echo %%~xA|findstr /v /x ".dll .bat .exe" && (
    tlv2txt %%A > %FreshDate%\%FreshTime%\%%~nA.txt 
) 
) 
0

その複雑にする必要があります。

:: Inclusion 
For /f "Delims=" %%A in (
    'Dir /B *.J_E *.J_T *.J_I *.bcc' 
) Do tlv2txt "%%A" > "%FreshDate%\%FreshTime%\%%~nA.txt" 

:: Exclusion 
For /f "Delims=" %%A in (
    'Dir /B ^| findstr /i /V ".bat$ .cmd$ .exe$ .dll$" ' 
) Do tlv2txt "%%A" > "%FreshDate%\%FreshTime%\%%~nA.txt" 
0

私もループのための不要なを削除し、一つだけを持っているでしょう:

If Not Exist "%FreshDate%%FreshTime%\" MD "%FreshDate%%FreshTime%" 

For /F "Delims=" %%A In ('Dir/B/A-D^|FindStr/VIE "\.dll \.exe \.bat') Do (
    tlv2txt "%%A">"%FreshDate%%FreshTime%\%%~nA.txt" 2>Nul 
    If Not ErrorLevel 1 Del "%%A")) 

は、私はできませんでしたではないしてくださいということコードスニペットから除外された%FreshTime%変数の形式を判断してください。末尾にバックスペースが含まれていないことを確認してください。この方法では

1
@echo off 
setlocal EnableDelayedExpansion 

set "exclude=.dll.exe.bat." 

for %%x in (*) do if "!exclude:%%~Xx.=!" equ "%exclude%" (
    echo %%x 
    tlv2txt %%x > %FreshDate%\%FreshTime%\%%~Nx.txt 
    del %%x 
) 

ファイルの拡張子は、非常に単純な方法で除外拡張子のリスト対と比較されます。結果は同じであるので、もし延長は、リストから削除され、そのような拡張ですリスト内のではありません。このメソッドは、外部コマンド(findまたはfindstrなど)を使用しないため、より高速に実行されます。

関連する問題