Пакетный скрипт для удаления файлов

96

У меня есть пакетный сценарий следующим образом.

D:
del "D:\TEST\TEST1\Archive\*.TSV" 
del "D:\TEST\TEST1\Archive\*.TXT"
del "D:\TEST\TEST2\Archive\*.TSV" 
del "D:\TEST\TEST2\Archive\*.TXT"
del "D:\TEST\TEST 100%\Archive\*.TSV" 
del "D:\TEST\TEST 100%\Archive\*.TXT"

Приведенный выше код удаляет все файлы «.txt» и «.tsv» из всех папок, кроме папки TEST 100%. При удалении файлов TEST 100%я получаю сообщение об ошибке The Path could not be found. Я предполагаю, что символ% в имени папки создает проблему. Может ли кто-нибудь помочь мне решить проблему и удалить файлы из папки TEST 100%?

Сатиш
источник
Почему у вас цитата в первой строке? Кроме того, почему вы имеете в виду диск, если ваш командный файл уже изменен на этот диск с первой строкой? Я попытался воспроизвести вашу проблему, и все сработало. Подтвердили ли вы, что архив существует в тесте 100%?
Рональд Барзелл

Ответы:

112

Вам нужно избежать% с другим ...

del "D:\TEST\TEST 100%%\Archive*.TXT"
Расс Фриман
источник
Я не могу говорить от имени OP, но в моей системе нет проблем с поиском пути с помощью%, а экранирование с помощью %% не позволяет системе найти его.
Рональд Барзелл
@ user1161318 - Я тестировал его в Windows 7. Без escape в пакетном файле выдает сообщение «Система не может найти указанный путь». Как я писал, он работает.
Расс Фриман
Хорошо, на XP я получаю противоположные результаты. Он находит путь нормально с%, но не может найти его с помощью %%.
Рональд Барзелл
5
Я предполагаю, что вы делаете это из командной строки, а не из командного файла.
Расс Фриман
2
Возможно ты прав. Я все время забываю, что в пакетном файле% - это префикс переменной, и вам нужно его избежать. +1
Рональд Барзелл
12

Есть несколько способов делать что-то в пакетном режиме, поэтому, если экранирование с двойным процентом %%не работает для вас, вы можете попробовать что-то вроде этого:

set olddir=%CD%
cd /d "path of folder"
del "file name/ or *.txt etc..."
cd /d "%olddir%"

Как это работает:

set olddir=%CD%устанавливает переменную "olddir"или любое другое имя переменной, которое вам нравится, в каталог, из которого был запущен ваш командный файл.

cd /d "path of folder"изменяет текущий каталог, в который будет смотреть пакет. сохраните цитаты и измените путь к папке, к которой вы стремитесь.

del "file name/ or *.txt etc..."удалит файл в текущем каталоге, на который смотрит ваш пакет, просто не добавляйте путь к каталогу перед именем файла, а просто укажите полное имя файла или, чтобы удалить несколько файлов с тем же расширением *.txtили любым другим расширением, которое вам нужно.

cd /d "%olddir%"берет переменную, сохраненную с вашим старым путем, и возвращается в каталог, с которого вы запустили пакет, это не важно, если вы не хотите, чтобы пакет возвращался к своему предыдущему пути к каталогу, и, как указано до того, как имя переменной может быть изменено на все, что вы хотите, изменив файл set olddir=%CD% line.

user1931470
источник
Лучше всего это сделать через pushd "folder" && del "filename" & popd.
Нуно Андре
10

Допустим, вы сохранили свое программное обеспечение на своем рабочем столе.
если вы хотите удалить всю папку, например программу удаления, вы можете использовать это.

cd C:\Users\User\Detsktop\
rd /s /q SOFTWARE

это приведет к удалению всей папки, называемой программным обеспечением, и всех ее файлов и подпапок

Убедитесь, что вы удалили правильную папку, потому что для этого нет варианта Да / Нет

user3674709
источник
4

Учтите, что файлы, которые вам нужно удалить, имеют расширение txtи находятся в этом месте D:\My Folder, тогда вы можете использовать приведенный ниже код внутри файла bat.

cd "D:\My Folder"
DEL *.txt 
Сарат Аванаву
источник
-7

в пакетном коде ваш путь не должен содержать пробелов, поэтому, пожалуйста, измените имя вашей папки с «TEST 100%» на «TEST_100%», и ваш новый код будет del «D: \ TEST \ TEST_100% \ Archive * .TXT»

надеюсь, это решит вашу проблему

Рави
источник
6
Никогда об этом не слышал. Это ново? -Сарказм отключен. Он работает с пробелами так же, как и без них, если вы указываете их в кавычках.
Blacktempel