none
Проблема удаления файлов только с указанным расширением RRS feed

  • Вопрос

  • Хочу удалить временные файлы с расширением tmp. Для этого использую команду:

     

    del /s *.tmp

     

    Но удаляются также файлы и с другими расширениями! Например:

     

    D:\Temp>del /s *.tmp
    Deleted file - D:\Temp\file1.tmp
    Deleted file - D:\Temp\file2.tmpz
    Deleted file - D:\Temp\file3.tmplt

     

    Как удалить только tmp-файлы?


    Что интересно, команда dir работает аналогично:

     

    D:\Temp>dir *.tmp

    Directory of D:\Temp

    18.03.2008  13:04                 0 file1.tmp
    18.03.2008  13:04                 0 file2.tmpz
    18.03.2008  13:04                 0 file3.tmplt

     

    18 марта 2008 г. 10:14

Ответы

  • Спасибо за идею, Svolotch! Я чуть модифицировал код, чтоб и точки и пробелы в имени файла допускались.

     

    Code Snippet

    FOR /F "delims=*" %%A IN ('dir *.tmp /b /s') DO IF /I "%%~xA"==".tmp" DEL "%%A"

     

    Поясню, если кому это понадобится.

    1. %~xA возвращает расширение файла.

    2. delims=* используется для того, чтобы заменить стандартный разделитель (пробел) на звездочку, т.к. она недопустима в имени файла.

    3. Кавычки в DEL "%%A" нужны для того, чтобы выполнить удаление файла, в имени которого есть пробелы.

    4. В условии IF опция /I позволяет игнорировать регистр букв.

     

    20 марта 2008 г. 11:59

Все ответы

  • Забавная задачка Smile. Но сделать это получилось только через PowerShell (remove-item), т.к. похоже что эти команды (DIR, DEL) воспринимают только 3 символа расширения файла.
    18 марта 2008 г. 12:10
  • Ну, да. Через скриптовые языки можно сделать. Но, согласитесь, что это несколько странное поведение встроенных команд. Наследие 8dot3 имен файлов?..

     

    19 марта 2008 г. 8:19
  • for /f "delims=. tokens=1*" %%a in ('dir *.tmp /b /s') do if "%%b"=="tmp" del %%a.%%b
    только трабл может возникнуть если в пути к файлу будет точка Smile
    19 марта 2008 г. 16:20
  • Спасибо за идею, Svolotch! Я чуть модифицировал код, чтоб и точки и пробелы в имени файла допускались.

     

    Code Snippet

    FOR /F "delims=*" %%A IN ('dir *.tmp /b /s') DO IF /I "%%~xA"==".tmp" DEL "%%A"

     

    Поясню, если кому это понадобится.

    1. %~xA возвращает расширение файла.

    2. delims=* используется для того, чтобы заменить стандартный разделитель (пробел) на звездочку, т.к. она недопустима в имени файла.

    3. Кавычки в DEL "%%A" нужны для того, чтобы выполнить удаление файла, в имени которого есть пробелы.

    4. В условии IF опция /I позволяет игнорировать регистр букв.

     

    20 марта 2008 г. 11:59