フォルダとその内容を削除するためのバッチファイル


2

ディレクトリをループして "SAMPLE"という名前のフォルダを削除するバッチファイルを作成しようとしています。これまでのところ私のコードはここにあります、どんな助けでも大いに感謝されるでしょう!

@echoオフタイトル待ちます!

"sourceDir = z:\ FOLDERS"を設定します。

"%sourceDir%"が存在しない場合(echo。%sourceDir%が見つかりませんでした。   & GoTo:完了)

::ファイルの削除/ F "Delims =" %%! ( 'Dir "%sourceDir%\")で& Dを実行します。
@rd "%%!" / s / q "%sourcedir%\ * \ SAMPLE"

:タイトル完了、完了……

エコー。& pause> nul


決勝戦 溶液 完全なソースコード サンプルアプリケーション 私見、学習曲線を最小限に抑えるためのより良いサンプルは、完全なソースコードと優れたパターンを備えた実際のアプリケーションです。
Kiquenet

回答:


6
for /d /r Z:\Folders %d in (SAMPLE) do if exist "%d" rd /s /q "%d"

バッチファイルでは%% dを使う必要がありますが、それが基本的な形式です。 Subversionの作業ディレクトリを整理して.svnフォルダを削除するのにも、同じような構成を使用しました。

編集:forコマンドの構文を修正しました。私が投稿したとき、私はメモリから作業していて、Windowsシステムから離れていました。ごめんなさい。


素早い対応に感謝しますが、次のような変更で何らかの理由でうまくいきませんでした (C:\ Path \ To \ Source *)の/ r / d %% dが存在する場合は、 "%% d \ SAMPLE"が必要です。rd / s / q "%% d \ SAMPLE"
user213878

これが解決策です。 @ECHO OFF SET FOLDER_PATH=Z:\FOLDERS SET SUBFOLDER_NAME=SAMPLE for /d /r %FOLDER_PATH% %%d in (%SUBFOLDER_NAME%) DO @if exist %%d echo "%%d" && rd /s/q "%%d"
user213878

であなたの拡張のすべてのインスタンスを引用することを忘れないでください for これにより、パスをスペースで正しく処理できます。私の答えを更新しました。
afrazier

1

キャデラックはこの質問に答えます。私はそれをオプションのパラメータを取り入れ、OPや他のものとは少し違うことをしたいと思う人に役立つかもしれないちょっとした設定を持つバッチスクリプトとしてそれを書きました。 echoステートメントはオプションであり、操作に関する出力が不要な場合は削除できます。バグがあるかどうか教えてください。

これがどのように機能するかの例

この例では、ワイルドカードオプションがtrueに設定されています。詳細については、以下のコードを参照してください。

dir D:\deltest

Wed 04/03/2013  07:05 PM    <DIR>          KEEPME
Wed 04/03/2013  07:05 PM    <DIR>          SAMPLE
Wed 04/03/2013  07:05 PM    <DIR>          SAMPLE2

delete-sample-dir.bat d:\deltest

Searching for *SAMPLE* in D:\deltest
Deleting the folder D:\deltest\SAMPLE
Deleting the folder D:\deltest\SAMPLE2

dir D:\deltest

Wed 04/03/2013  07:05 PM    <DIR>          KEEPME

のコード delete-sample-dir.bat

    @echo off 

    REM set the name of the directory you would like to target for deleting
    set dirname=SAMPLE

    REM set the following to "true" if you want to select any directory that includes the name, e.g., a wildcard match
    set usewildcard=true


    REM --DO NOT EDIT BELOW THIS LINE---------------

    REM sentinel value for loop
    set found=false

    REM If true surround in wildcards
    if %usewildcard% == true (
        set dirname=*%dirname%*
    ) 

    REM use current working directory or take the directory path provided as the first command line parameter
    REM NOTE: do not add a trailing backslash, that is added in the for loop, so use "C:" not "C:\"
    set directorytosearch=%cd%
    if NOT "%1%" == "" (
        set directorytosearch=%1%
    )
    echo Searching for %dirname% in %directorytosearch%


    REM /r for files
    REM /d for directories
    REM /r /d for files and directories
    for /d %%i in (%directorytosearch%\%dirname%) do (
        IF EXIST %%i (
            REM change the sentinel value
            set found=true

            echo Deleting the folder %%i
            REM Delete a folder, even if not empty, and don't prompt for confirmation
            rmdir /s /q %%i
        )
    )

    REM logic to do if no files were found
    if NOT "%found%" == "true" (
        echo No directories were found with the name of %dirname%
    )

誰か このバッチを参照したところ、引用符で囲まれていないものが見つかりました。 %%i varsとの不適切な使用 "%1%" の代わりに "%~1"。これとは別に if exist 余計です。
LotPings

0

@ user213878コメント解決策:

のコード deleteFolderDebug.bat

@echo off
color 1F
echo.
echo Delete Debug Folder

SET FOLDER_PATH=C:\TFS\AddIn\bin
SET SUBFOLDER_NAME=Debug
SET FULLPATH=%FOLDER_PATH%\%SUBFOLDER_NAME%
IF NOT EXIST "%FULLPATH%" (echo.Could not find %FULLPATH% &GoTo:done)

echo.
echo Deleting...
for /d /r %FOLDER_PATH% %%d in (%SUBFOLDER_NAME%) DO @if exist %%d echo "%%d" && rd /s/q "%%d"

:done title,Done.......

:EOF
echo Waiting seconds
timeout /t 3 /nobreak > NUL
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.