2016-10-06 5 views
0

指定したディレクトリのすべてのファイルとフォルダをループして削除しようとしています。私は、バッチスクリプトと非常に以前の経験を持っていないと私はオンライン研究のかなりを行っている次が動作しない理由は、しかし、私は理解することはできません。指定されたディレクトリのすべてのファイルとフォルダをループして削除する

@echo off 
CLS 
mode con: cols=160 lines=60 
echo. 
::**************************************************************** 
Set  Location[0]=\lib\Debug 
Set  Location[1]=\temp\ 
::**************************************************************** 

:BEGIN 
echo start 

for /F "tokens=2 delims==" %%s in ('set Location[') do (
    for /r %%i in (%%s) do echo %%i 
) 


echo end 
pause 

それがすべて一覧表示されて何が起こって終わりますバッチスクリプトの現在のディレクトリにあるファイル。

このスクリプトをLocation変数で指定されたすべてのディレクトリにループさせ、そこで見つかったすべてのファイルとフォルダを削除するにはどうすればよいですか。クリーンスレート。

+0

バッチファイルに関連して2つのフォルダパスがありますか。 – Squashman

+0

まず、SetとLocationの間の無意味な空白をすべて取り除き、それを1つのスペースに置き換えます。そうすることで、変数が "** spacespacespacespacespacespaceLocation [** ** – Compo

+0

@Squashman]から始まっていないと確信しています。場所はバッチファイルの場所に関連しています。バッチがC:\ tempの場合、ファイルはC:\ temp \ lib \ Debugにあり、C:\ temp \ temp – Bojan

答えて

1

これは基本的にありませんが、ベースフォルダを削除されます再作成します。

@echo off 

Set Location[0]=lib\Debug 
Set Location[1]=temp 

for /F "tokens=2 delims==" %%H in ('set Location[') do (
    rmdir /Q /S "%%H" 
    md "%%H" 
) 

ここでは、バッチファイルを実行する前の私のディレクトリ構造の一覧を示します。

C:\BatchFiles\SO\rmdir>dir /b /s 
C:\BatchFiles\SO\rmdir\cleanup.bat 
C:\BatchFiles\SO\rmdir\lib 
C:\BatchFiles\SO\rmdir\temp 
C:\BatchFiles\SO\rmdir\lib\Debug 
C:\BatchFiles\SO\rmdir\lib\donotdelete 
C:\BatchFiles\SO\rmdir\lib\donotdelete.txt 
C:\BatchFiles\SO\rmdir\lib\Debug\deleteme 
C:\BatchFiles\SO\rmdir\lib\Debug\deleteme.txt 
C:\BatchFiles\SO\rmdir\lib\Debug\deleteme\deleteme.txt 
C:\BatchFiles\SO\rmdir\lib\donotdelete\donotdelete.txt 
C:\BatchFiles\SO\rmdir\temp\deleteme 
C:\BatchFiles\SO\rmdir\temp\deleteme.txt 
C:\BatchFiles\SO\rmdir\temp\deleteme\deleteme.txt 

ここで、バッチファイルを実行して、ディレクトリリストを再度実行します。あなたは、一時的なものからデバッグまでのすべてを削除するが、それ以外のものはすべて残しているのがわかる。

C:\BatchFiles\SO\rmdir>cleanup.bat 

C:\BatchFiles\SO\rmdir>dir /b /s 
C:\BatchFiles\SO\rmdir\cleanup.bat 
C:\BatchFiles\SO\rmdir\lib 
C:\BatchFiles\SO\rmdir\temp 
C:\BatchFiles\SO\rmdir\lib\Debug 
C:\BatchFiles\SO\rmdir\lib\donotdelete 
C:\BatchFiles\SO\rmdir\lib\donotdelete.txt 
C:\BatchFiles\SO\rmdir\lib\donotdelete\donotdelete.txt 
+0

シンプルで機能します、ありがとうございます! – Bojan

0

これがあなたを助けている場合を参照してください:

@Echo Off 
Set "Location[0]=C:\temp\lib\Debug" 
Set "Location[1]=C:\temp\temp" 

For /F "Tokens=1* Delims==" %%A In ('Set Location[') Do (
    For /R "%%B" %%C In (*.*) Do Echo=%%C) 

pause 
+0

私はdllの内部のリストを持っていますデバッグし、その名前のどれも印刷されませんでした。私は全く出力がなかった、ちょうどキーを押し続ける。私はLocation [0]でテストしました。私もあなたのスクリプトをコピーして貼り付け、私はタイプミスがないことを確認するために何も変更しませんでした。 – Bojan

+0

私は完全なパスを使用していましたか、それとも想定される相対パスを使用しようとしていますか? – Compo

+0

相対パスがまだありません – Bojan

0

削除し、フォルダをハードコーディングしたい場合、あなたはこのようにそれを行うことができます。

@echo off & setlocal 
set todelete="lib\debug" "temp" "something else" "and this\folder\here" 
call :dodelete %todelete% 
goto :eof 

:dodelete 
if "%~1"=="" goto :eof 
rd /s "%~dp0%~1" 
md "%~dp0%~1" 
shift 
goto :dodelete 
+0

私は自分のフォルダ構造を維持し、その中のコンテンツのみを削除する必要があります。 – Bojan

+0

これは、todeleteで指定された場所のすべてのファイルとフォルダ(あなたの言ったようなもの)を削除します。ベースフォルダを保持したい場合は、rd行の後に 'md"%dpn0 \ %%〜a "を追加することができます。 – soja

+2

私はセミコロンとして別の区切り文字を選び、ファイル名とフォルダ名にコンマを使うことができます。 – Squashman

関連する問題