3

Итак, я работаю над файлом bat, чтобы удалить файл, а затем найти и удалить папку.

Он просто удаляет файл, но я сталкиваюсь с проблемами с остальными. Папка, которую я пытаюсь удалить, каждый раз имеет другое имя, но каждый раз содержит одно и то же ключевое слово в начале имени папки.

Следующая строка работает, чтобы найти папки, о которых идет речь, но я не знаю, как на самом деле удалить папку, когда она найдена.

dir C:\location\*keyword*.* /S

Любая помощь будет принята с благодарностью.

PS Я в порядке с кодом, который не предназначен для .bat, но его нужно будет запустить при запуске, если это не так.

Я использовал оба следующих (не одновременно), чтобы удалить файл (ы), если найден

del C:\location\*keyword*.* /S 
rd  C:\location\*keyword*.* /S 

1 ответ1

2

Поместите команду DIR с переключателем /B тоже в цикл FOR /F а затем используйте пакетные замены, чтобы отобразить только букву диска и путь к найденной папке файла, найденного в рекурсивной команде DIR со строкой для поиска с помощью « keyword » и символы подстановки, как в вашем примере, а затем передайте их команде RD с помощью ключей /Q и /S


Пакетный скрипт

 @ECHO ON

 SET keyword=<My Keyword>
 SET searchfolder=C:\Folder\<StartHere>

 CD /D "%searchfolder%"
 FOR /F "TOKENS=*" %%F IN ('DIR /S /B "*%keyword%*.*"') DO RD /S /Q "%%~DPF"

 GOTO EOF

Дополнительные ресурсы

  • FOR /F

  • Пакетные замены (ЗА /?)

    Кроме того, была улучшена замена ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:

    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    %~sI        - expanded path contains short names only
    %~aI        - expands %I to file attributes of file
    %~tI        - expands %I to date/time of file
    %~zI        - expands %I to size of file
    %~$PATH:I   - searches the directories listed in the PATH
                   environment variable and expands %I to the
                   fully qualified name of the first one found.
                   If the environment variable name is not
                   defined or the file is not found by the
                   search, then this modifier expands to the
                   empty string
    

Скрипт тестирования

Вам нужно будет нажать Enter, чтобы перейти к каждой команде, но прежде чем нажимать Enter, обязательно прочитайте весь экран, чтобы увидеть, что все найдено, чтобы подтвердить, что это то, что вы ожидаете, что будет удалено и т.д.

 @ECHO ON

 SET keyword=<My Keyword>
 SET searchfolder=C:\Folder\<StartHere>

 CD /D "%searchfolder%"

 ECHO *** Below are the folder path and file names of the files matching "*%keyword%*.*" 

 DIR /S /B "*%keyword%*.*"

 PAUSE
 CLS

 ECHO *** Below are the folder paths that will be deleted  where files were found to reside matching the pattern "*%keyword%*.*"

 FOR /F "TOKENS=*" %%F IN ('DIR /S /B "*%keyword%*.*"') DO ECHO RD /S /Q "%%~DPF"

 PAUSE

 GOTO EOF

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .