2017-07-20 12 views
1

私はいくつかのサブフォルダを持つフォルダを持っています。構造は次のようである:「開始日」以外のすべてのフォルダを削除するバッチスクリプト

  • C:\ fooという
  • C:\ fooという\
  • C web.foo:\ fooという\ web.bar
  • C:\ fooという\
  • win.foo C:\ fooという\
  • C win.bar:\ fooという\ mobile.foo
  • C:\ fooという\ mobile.bar

私は時々のwバッチスクリプト次でそれを含むファイルとフォルダを削除するっぽい:

ここ
rmdir C:\foo /s /q 

、全体のフォルダCという問題ではありませんでした:\ fooが完全に削除されました。

しかし、私はそのファイルを含むC:\ fooのサブフォルダだけを削除したいだけです。"web"で始まらないでください。

これにはどんな解決策がありますか?

ありがとうございます!

答えて

0

次は、トリックを行うことは、現在のディレクトリを使用してバッチファイルです注意してください。

@echo off 
for /F "delims=" %%D in ('dir /B /AD ^| findstr /V "^web."') do (
    echo rmdir %%D /s /q 
) 

それは大丈夫rmdirの前でechoを削除するかどう。

dirコマンドは/ADのためにディレクトリ名を一覧表示し、/Bのために単純な名前の出力を使用します。最初に検索するには、/Vfindstrを使用してください。否定の場合は^を使用してください。さらにパイプ記号はエスケープする必要があります^|


あなたは以下を使用することができ、引数を使用して動的なバッチスクリプトをしたい場合(それは大丈夫rmdirの前でechoを削除するなら。)、batchname.bat "C:\foo" web.を経由してそれを呼び出す:

@echo off 

set INVARGS=0 
if [%1] == [] set "INVARGS=1" 
if [%2] == [] set "INVARGS=1" 
if %INVARGS% == 1 (
    echo echo %0 ^<directory^> ^<directory_prefix^> 
    goto eof 
) 

set "folder=%1%" 
set "prefix=%2%" 

pushd "%folder%" 
echo List of folders that should be deleted: 
for /F "delims=" %%D in ('dir /B /AD ^| findstr /v "^%prefix%"') do (
    echo "%cd%\%%D" 
) 
popd 

:choice 
echo. 
set /P "c=Are you sure you want to continue [Y/N]?" 
if /I "%c%" EQU "Y" goto yes 
if /I "%c%" EQU "N" goto eof 
goto :choice 

:yes 
echo. 
pushd "%folder%" 
for /F "delims=" %%D in ('dir /B /AD ^| findstr /v "^%prefix%"') do (
    echo rmdir %%D /s /q 
) 
popd 

:eof 
+0

ありがとう、これはトリックでした! – swimagers

0

この意志すべてのファイルを削除するweb.

@echo off 
setlocal EnableDelayedExpansion 

for /f %%F in ('dir /b /s') do (
    set "name=%%~nF" 
    if /i not "!name:~0,4!" == "web." (
     rm !name! 
    ) 
) 
関連する問題