Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск нескольких файлов и замена на другие

Ответить
Настройки темы
CMD/BAT - Поиск нескольких файлов и замена на другие

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте
имеется скрипт:
Код: Выделить весь код
@echo off
for /d %%p in (c d e f) do (forfiles /s /p %%p:\ /m file1.txt /c "cmd /c xcopy /y c:\users\administrator\desktop\file22.txt @path && ren @path file22.txt")
пример брал отсюда: http://forum.oszone.net/thread-287613.html
надо чтобы искал 3 файла только в диске на котором установлена винда (не задавая букву диска, учитывая, что windows может быть установлена в Y:\, L:\. P:\ и т.д.) и заменял на другие 3 файла поочередно , которые находятся в директории с батником, не указывая полные пути до них.
Приведенный выше скрипт отлично заменяет 1 на другую, но почему-то после успешной замены дальше выдает ошибки типа Access deniet to:разные папки (хотя у меня админ права).
Как избежать замены не на тот файл с одинаковым именем и расширением, если батник будет запущен из того же диска на котором содержатся файлы для поиска и замены(например первым найдет файл в директории с запускаемым bat и попытается его же заменить)?
И не совсем понятен зачем там команда переименования ren.

Отправлено: 11:47, 11-09-2014

 

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


начнем с конца. команда переименование нужна для переименования конечного файла ибо переменная @path из forfiles возвращает полный путь к файлу с именем и расширением этого самого файла.
избежать замены не на тот файл можно указав абсолютный путь к правильному файлу (в вышеуказанном примере так и сделано c:\users\administrator\desktop\file22.txt)
далее по правам дядюшка Билли и вся его скромненькая корпорация Мелкомягк не шибко верит в сознательность пользователей а посему режет права к некоторым файлам и папкам в особенности к тем, что находятся в папке Windows, для того чтобы к ним подобраться нужно не только быть админом, нужно уметь шаманить с владением (или владетельством?) этими самыми папками и файлами, упомяну еще раз, что лезть к ним (системным файлам) можно лишь в том случае если вы точно знаете что это за файл, с чем его принято есть, кто им питается кроме вас и из-за чего может произойти какое-нибудь несварение с последующим реактивным поносом.
теперь собственно по замене файлов т.к. поиск сводится к поиску на системном диске (в данном случае диске с виндой) то лучше всего вспомнить про славную переменную %systemdrive% которая и вернет нам нужную букву и даже вместе с двоеточием, первый цикл в таком случае перепаиваем на поиск и скармливаем ему файл в котором лежат нужные нам пары на замену.

Код: Выделить весь код
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in (file.txt) do (
for /f "tokens=1-2 delims=_" %%A in ("%%i") do (
set orig=%%A
set repl=%%B
forfiles /s /p %systemdrive%\ /m !orig! /c "cmd /c xcopy /y d:\files4replace\!repl! @path && ren @path !repl!"
))
file.txt файл в котором лежат пары файлов original_replacement*
d:\files4replace\ место где лежат файлы на замену

Примечание
*file.txt в котором хранятся пары файлов на замену должен иметь вид:
Код: Выделить весь код
111.txt_222.txt
333.txt_444.txt
т.е. два имени файлов разделены подчеркиванием, первый файл - оригинальный, второй - вставляемый на место оригинала.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:20, 11-09-2014 | #2



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

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


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо за ответ, создал на системном диске 2 файла 111.txt и 333.txt, а в папке с батником 222.txt 444.txt и file.txt с указанием пар соответственно, но скрипт заменяет только 2 файла, указанные в 1-й строке, в чем может быть проблема?

Отправлено: 18:10, 11-09-2014 | #3


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


В синтаксисе файла, в названии файлов как заменяемых так и замещающих. Даже лишний пробел может сыграть свою роль.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:38, 11-09-2014 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск нескольких файлов и замена на другие

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Поиск и замена файлов. Drotik Скриптовые языки администрирования Windows 2 24-04-2014 18:07
CMD/BAT - Поиск файлов по маске и их замена другими. lexxstr Скриптовые языки администрирования Windows 0 20-12-2012 22:54
CMD/BAT - Поиск папки и замена файлов в ней 1Gur Скриптовые языки администрирования Windows 4 07-03-2012 18:15
CMD/BAT - [решено] Поиск, остановка процесса, поиск и замена файла на разных дисках Gawr33 Скриптовые языки администрирования Windows 11 23-04-2011 23:09
CMD/BAT - [решено] Поиск, остановка процесса, поиск и замена файлов на разных дисках 4zz Скриптовые языки администрирования Windows 2 21-02-2011 16:07




 
Переход