Пакетний файл для видалення папки та її вмісту


2

Я намагаюся написати пакетний файл, який би пройшов цикл через каталог і видалив будь-яку папку, яка називається "SAMPLE". Ось мій код поки що, будь-яка допомога буде дуже вдячна!

@echo off title ЗАЧЕКАЙТЕ!

Встановити "sourceDir = z: \ FOLDERS"

ЯКЩО НЕ Є "% sourceDir%" (echo. Не вдалося знайти% sourceDir% & GoTo: виконано)

:: видалити файли для / F "Delims =" %%! in ('Dir "% sourceDir% \") do &
@rd "%%!" / s / q "% surcedir% \ * \ SAMPLE"

: закінчена назва, Готово .......

ехо. & пауза> нуль


Будь-яке остаточне рішення з повним прикладом зразка вихідного коду ? ІМХО, кращі зразки для мінімізації кривої навчання - це реальні додатки з повним вихідним кодом та хорошими зразками
Кікенет

Відповіді:


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

Вам потрібно буде використовувати %% d у пакетному файлі, але це основна форма. Я використовував подібні конструкції для очищення робочих каталогів Subversion для видалення .svn папок.

Редагувати: виправлено синтаксис команди for. На час публікації я працював із пам’яті та від системи Windows. Вибачте.


дякую за швидку відповідь, але вона чомусь не спрацювала, якщо наступна зміна для / r / d %% d у (C: \ Шлях \ До \ Джерело *) зробить, якщо існує "%% d \ SAMPLE" rd / s / q "%% d \ SAMPLE"
користувач213878

ось рішення:@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

На це запитання відповідає Каділак. Я написав це як пакетний скрипт, який бере параметри опцій і має трохи конфігурації, що може допомогти ОП та іншим, хто хоче робити трохи інші речі. Виписки ехо є необов’язковими і можуть бути видалені, якщо ви не хочете жодного результату в операції. Повідомте мене, чи є помилки.

Зразок того, як це може працювати

У цьому прикладі параметр підстановки встановлено на істинне, для отримання додаткової інформації див код нижче

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ВАР і використання imporper з "%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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.