2014-11-26 3 views
1

Допустим, у меня есть несколько файлов с именем:Удалить все файлы с расширением .csv, кроме одно- Batch

1. Item-A.csv 
2. Item-B.csv 
3. Total-AB.csv 
4. Pictures.jpeg 

И мне нужно, чтобы удалить все с .csv расширения, кроме общего-av.csv в любой директории. Таким образом, оставшиеся файлы являются следующими в любом каталоге, в котором я участвую:

1. Total-AB.csv 
2. Pictures.jpeg 

Спасибо за помощь.

+0

Будет ли файл всегда называться Total-AB.csv или изменить имя на другое? Кроме того, что вы пробовали до сих пор? – SomethingDark

+0

'find -name '* .csv'! -name 'Total-AB.csv -delete' (запустить ** без ** удалить сначала, чтобы проверить список). – Wrikken

+0

Имя файла всегда будет называться total-ab.csv. Я пробовал для %% i in (*. *) Do if not "%% i" == "total-ab.csv" del/q "%% i". Но это не учитывает расширение, оно удаляет все, кроме файла с таким именем. –

ответ

0

Попробуйте это в BAT-файле:

for /f "usebackq" %%f in (`dir *.csv /s/b ^| findstr /v /i "Total-AB.csv"`) do (
    echo %%f 
    rem del %%f 
) 

Достаньте rem, когда он выглядит, как он работает, как ожидалось.

+0

спасибо за предложение, он находит файлы с расширением csv. но ничего не удаляет. –

+0

Да, 'REM' комментирует строку так, чтобы она не запускалась. Если эхо выглядит так, как работает, удалите команду «REM». – SomethingDark

+0

Я попробовал это изначально без 'REM', и это не сработало. –

0

Вот команда PowerShell, чтобы удалить все * .csv во всех вложенных папок для общего-av.csv

Dir *.csv -Exclude total-av.csv -R | del 

кроме Вот та же команда без использования пакетных shortnames.

Get-ChildItem -Filter *.csv -Exclude total-av.csv -Recurse | Remove-Item 
0

Проверьте это на дереве образцов. Обратите внимание, что он рекурсивный по всему дереву папок.

@echo off 
for /r "d:\base\folder" %%a in (*.csv) do if /i not "%%~nxa"=="total-av.csv" del "%%a" 
Смежные вопросы