폴더 및 내용을 삭제하는 배치 파일


2

내가 디렉토리를 통해 루프와 "샘플"이라는 폴더를 삭제할 배치 파일을 작성하려고 해요. 여기까지 내 코드가 있습니다, 어떤 도움을 크게 주시면 감사하겠습니다!

@echo 오프 제목 기다려!

"sourceDir = z : \ FOLDERS"를 설정하십시오.

IF NOT EXIST "% sourceDir %"(echo.Could not find sourceDir %   GoTo : 완료 (& amp; G)

:: 파일 삭제 / F "Delims ="%%! in ( 'Dir "% sourceDir % \") do & amp;
@rd "%%!" / s / q "% sourcedir % \ * \ SAMPLE"

: 완료 제목, 완료 .......

echo. & pause & gt; nul


모든 최종 해결책 전체 소스 코드 샘플 애플리케이션? IMHO, 학습 곡선 최소화를위한 더 나은 샘플은 전체 소스 코드와 좋은 패턴을 갖춘 실제 응용 프로그램입니다.
Kiquenet

답변:


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

배치 파일에서 %% d를 사용해야하지만 기본 형식입니다. .svn 폴더를 제거하기 위해 Subversion 작업 디렉토리를 정리하기 위해 비슷한 구문을 사용했습니다.

편집 : for 명령 구문을 수정했습니다. 내가 게시 할 때 메모리에서 멀리 Windows 시스템에서 일하고 있었다. 죄송합니다.


빠른 응답을 주셔서 감사합니다. 그러나 다음과 같은 변경으로 인해 어떤 이유로 작동하지 않았습니다. "%% d \ SAMPLE"rd / s / q "%% d \ SAMPLE"이 있으면 (C : \ Path \ To \ Source *)의 / r / d %
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.