2017-01-08 3 views

答えて

1

私たちは、フォルダC:\Temp\Testは、これらのサブフォルダに次の非隠されたサブフォルダとファイルが含まれていると仮定しましょう:

  • フォルダ1
    • ファイル1.TXT
  • フォルダ2
    • ファイル2.mp3
  • フォルダ3
    • ファイル3.m4a
  • フォルダ4
  • フォルダ5
    • ファイル5.tmp
    • ファイル5.doc

C:\Temp\Testのものを5つのサブフォルダを処理するバッチファイル:

@echo off 
for /D %%D in ("C:\Temp\Test\*") do call :CheckFolder "%%D" 
goto :EOF 

:CheckFolder 
for %%I in (flac mp3 m4a) do (
    if exist "%~1\*.%%I" (
     echo Folder %1 contains *.%%I file. 
     goto :EOF 
    ) 
) 
echo Delete folder %1 
echo rd /Q /S %1 
goto :EOF 

は、バッチファイルが出力を生成します

Delete folder "C:\Temp\Test\Folder 1" 
rd /Q /S "C:\Temp\Test\Folder 1" 
Folder "C:\Temp\Test\Folder 2" contains *.mp3 file. 
Folder "C:\Temp\Test\Folder 3" contains *.m4a file. 
Delete folder "C:\Temp\Test\Folder 4" 
rd /Q /S "C:\Temp\Test\Folder 4" 
Delete folder "C:\Temp\Test\Folder 5" 
rd /Q /S "C:\Temp\Test\Folder 5" 

バッチファイルが期待どおりに動作しているようです。次のステップでは、RDコマンドでフォルダを削除することを実際に実行するには、最後の1行からechoを削除します。バッチ出力は以下のようになります。

Delete folder "C:\Temp\Test\Folder 1" 
Folder "C:\Temp\Test\Folder 2" contains *.mp3 file. 
Folder "C:\Temp\Test\Folder 3" contains *.m4a file. 
Delete folder "C:\Temp\Test\Folder 4" 
Delete folder "C:\Temp\Test\Folder 5" 

フォルダC:\Temp\Testは今だけ含まれています

  • フォルダ2
    • ファイル2.mp3
  • フォルダ3
    • ファイル3。M4A

ミッションは達成しました。

使用されているコマンドとその動作方法を理解するには、コマンドプロンプトウィンドウを開き、次のコマンドを実行して、コマンドごとに表示されているすべてのヘルプページをすべてよく読んでください。ここで

  • call /?
  • echo /?
  • for /?
  • goto /?
  • if /?
  • rd /?
0

は奇妙な代替手段です。

特定の質問の場合は、選択した親ディレクトリと必要な拡張子がそれぞれ3行目と4行目の2つの変数に入力されていることを確認してください。

@Echo Off 
SetLocal EnableDelayedExpansion 
Set "ParD=C:\Users\blazin8s\Main Directory" 
Set "Exts=*.flac *.mp3 *.m4a" 
For /D %%A In ("%ParD%\*") Do Call :Sub "%%~fA" 
Timeout -1 
Exit/B 

:Sub 
Set "i=0" 
For /F "Tokens=1-3" %%A In ('RoboCopy %1 Null /E /LEV:1 /NFL /NDL /NJH /L %Exts% 
') Do If %%B==: (Set/A "i+=1" 
     If !i! Equ 2 If %%C Equ 0 Echo=RD/S/Q %1) 
  • 上記すぎる変更することができ、次いで、11 (オプション)ライン、上/Sに最初の変更/EGtr

    変更ライン13上の第二Equディレクトリだけを除去します指定した拡張子のいずれかを含む場合によっては、RD/S/QMoveに変更して、指定した拡張子を含むディレクトリだけを移動することもできます。

    オリジナルの投稿の行13を0から4に変更して、指定した拡張子に一致する4つのファイルを含むディレクトリを削除することもできます。

- すべての場合において、スクリプトだけにどうなるかを紹介します。あなたがその出力に満足している場合は、ライン13からEcho=を削除し、いずれかのライン6から-を削除するか、行のすべての6

1
私はを通して2つの入れ子 forループ、外側に1回の繰り返し処理を使用してそれを行うだろう

ディレクトリと内部のファイルタイプを繰り返します。内部変数は、あらかじめ定義された型のうち少なくとも1つのファイルがある場合にのみ反復します。この場合、フラグ変数が設定されます。内部ループの後、そのフラグがチェックされ、条件付きでディレクトリの削除が行われます。

for /D %%D in ("D:\root\*") do (
    set "FLAG=" 
    pushd "%%~D" 
    for %%F in ("*.flac" "*.mp3" "*.m4a") do set "FLAG=#" 
    popd 
    if not defined FLAG rmdir /S /Q "%%~D" 
) 
関連する問題