Пакет: найти файл и переименовать его / найти файл и удалить его

Итак... да, я довольно новичок. Все еще пытаюсь объяснить как можно лучше. Но нужна помощь с такой вещью, как найти точный файл с диска C: (с пакетом) и переименовать его. Также хотел узнать, как найти файл на диске C: и удалить его. (2 проблемы в 1 теме...)

Проблема 1. пример: я хочу найти файл с именем "text1.txt" на диске C: с пакетом, если он будет успешно найден, переименуйте его в "text2.txt".

Проблема 2. пример: я хочу найти файл с именем "image1.jpg" на диске C: с пакетом, если успешно найден, удалить его.

Или как это можно сделать с пакетом? del image1 проверяет только ту же папку, где она уже есть, то же самое с переименованием. Как найти эти файлы пакетом со всего диска C:? Просто пример. 2 мелочи, которые нужно решить, переименовать и удалить, ища точные файлы с пакетом. Как насчет удаления файла из подпапки с помощью пакета? Но извините мое низкое ноу-хау, нужно с чего-то начинать эти вещи.


person Kaster    schedule 28.03.2013    source источник


Ответы (2)


О, как здорово иметь хороших программистов! Большинство программистов, которых я знаю, УГРОЗНЫЕ.

for /f "delims=" %%i in ('dir /s /b /a-d "text.txt"') do (ren "%%i" text2.txt)

Должен выполнить задачу переименования. Однако вы должны добавить диск и начальный каталог к ​​имени файла, иначе он переименует ВСЕ файлы text.txt во ВСЕХ подкаталогах. Следовательно, ...dir /s/b "c:\users\kaster\text.txt"... обработает "c:\users\kaster\" и все каталоги ниже и переименует ВСЕ файлы с именем text.txt в новое имя.

Он работает, выполняя DIRсканирование в /b базовом режиме (т.е. только имена файлов) /s включая подкаталоги /a-d игнорируя совпадающие имена каталогов для файлов с именем "text.txt" - и полное имя файла назначается %%i. Предложение delims гарантирует, что любые пробелы не интерпретируются как разделители.

Видеть

`FOR ?` 

из подсказки для документации.

И если вы выполняете это непосредственно из подсказки, измените каждый %% на %

Вторая команда существенно проще

del /s "image1.jpg"

Опять же, добавьте начальный путь и будьте ОЧЕНЬ, ОЧЕНЬ осторожны. Это удалит ВСЕ имена файлов, соответствующие «image1.jpg», в указанном каталоге и под ним.

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

person Magoo    schedule 28.03.2013
comment
Спасибо за советы! Кстати, вы знаете, почему это переименование работает только тогда, когда вы не запускаете пакет от имени администратора? При запуске этого пакетного файла переименования от имени администратора будет указано, что файл не найден, он работает только при обычном запуске. И если вы знаете, как заставить его работать также при запуске от имени администратора, как я могу настроить его так, чтобы он всегда запускался ТОЛЬКО от имени администратора, что вы даже не могли запускать его в обычном режиме, только для администраторов. - person Kaster; 28.03.2013

Попробуй это. Если вывод в порядке, удалите команду echo из строки.

for /f "delims=" %%i in ('dir /s /b /a-d \file1.txt \image1.jpg') do if "%%~nxi"=="file1.txt" (echo ren "%%~i" "text2.txt") else if "%%~nxi"=="image1.jpg" echo del "%%~i" 
person Endoro    schedule 28.03.2013
comment
Могу ли я иметь их в 2 разных командах? Другой для поиска и переименования именованного файла, а другой для поиска и удаления именованного файла? Было бы немного проще понять цели обоих с двумя разными командами. - person Kaster; 28.03.2013