2016-04-28 11 views
1

私はマップレイヤー(D:\data\parks, D:\data\buildings, D:\data\rivers)からのデータを含む多くのフォルダーを持つD:\dataのディレクトリーを持っています。バッチファイル内の特定の名前で始まらないフォルダからファイルとサブフォルダを削除するにはどうすればよいですか?

は私が名前'raster'すなわち

D:\data\raster_aerialimageで始まる「データ」内の任意のフォルダを除いて、ファイルやサブフォルダの両方が含まれ、これらのサブフォルダのすべての内容を削除したいです。

フォルダーの1つを削除するコードがありますが、すべてのフォルダーをループし、「ラスター」で始まらないフォルダーのみを指定する必要があります。このコードを追加するにはどうすればいいですか?新しい?

@echo off 
set folder=D:\data 
set except=raster 
set "MT=%TEMP%\DelFolder_%RANDOM%" 

mkdir %MT% 
:: mirror an empty dir to a folder tree will delete it 
robocopy "%MT%" "%folder%" /MIR /XD %except%* /R:1 /W:1 
rmdir /S /Q "%MT%" 

注ちょうど%except%変数の後ろにワイルドカードスター:私はすべての新しいバージョンのWindowsで利用可能であるのRobocopy.exeを使用することをお勧め

FOR /D %%p IN ("D:\data\parks\*.*") DO rmdir "%%p" /s /q 

答えて

1

dir /A:Dを使用すると、すべてのディレクトリをfindstrとともに参照し、rasterで始まらないディレクトリのみを返すことができます。その後、出力を解析するためにfor /Fループを使用します。

pushd "D:\data" 
if ErrorLevel 1 goto :EOF 
for /F "eol=| delims=" %%P in (' 
    dir /B /A:D "*.*" ^| findstr /L /V /I /B /C:"raster" 
') do (
    rmdir /S /Q "%%~fP" 
) 
popd 
+0

ありがとう@aschipfl - エラー 'D:\>(rmdir/S/Q "airports")が表示されるようです。指定されたファイルが見つかりません。 これは他のいくつかのフォルダでも起こりそうです。 – Chris

+0

Hmm ... 'dir/A:D'は存在するディレクトリだけを返すべきです...これらのディレクトリやサブアイテムに十分なアクセス権がないのでしょうか? 'dir/B/A:D-L" D:\ data "'で試してみたらどうでしょうか? – aschipfl

+0

私は同じメッセージを受け取っているようです。データをローカルのC:ドライブとZ:ドライブに移動しましたが、同じメッセージが表示されます。私はすべての3つのドライブを読み書きできるので、謎のビット! – Chris

1

これは高速で、非常に長いパス名に対応しています。

+0

これは非常にうまく動作するようです - 唯一の問題は、それはラスタ名前が付けられていないフォルダを削除ですが、私は実際にフォルダのみ、フォルダの内容を削除しないようにしたいです自分自身。 – Chris

関連する問題