|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] копировать из текущего каталога... |
|
|
CMD/BAT - [решено] копировать из текущего каталога...
|
Новый участник Сообщения: 2 |
Профиль | Отправить PM | Цитировать Доброго времени суток! Помогите написать Bat-файл:
Написать пакетный файл, который будет копировать из текущего каталога все файлы с расширением .txt, кроме одного файла, указанного в качестве первого параметра командной строки, в каталог, указанный вторым параметром. Переписывать только те файлы, которые новее одноименных в каталоге- приемнике. Если произошла ошибка копирования, выдать сообщение и прервать выполнение файла. |
|
Отправлено: 10:06, 09-04-2011 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 12:03, 09-04-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Здравствуйте, я только осваиваю написание скриптов, и мне тоже необходимо копировать все файлы из папки крома одного конкретного файла
Не могли бы Вы, по детальнее объяснить по строчкам, какая команда что делает Цитата:
здесь тоже не все понятно: Цитата:
|
||
Отправлено: 14:42, 13-01-2012 | #3 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Цитата:
bfile.bat param1 param2 Зачем нужна строка If '%2==' GoTo :Eof Если параметр %2 отсутствует (пустой) то получим под If выражение '==' которое истинно и приведёт к переходу на конец батника и его завершению работы. ( GoTo :Eof) Это сделано для того, чтобы случайный запуск батника не привёл к непредсказуемым последствиям - здесь без параметров батник ничего не сделает. Echo %1>~Xcopy.Tmp Здесь имя файла, указанное в первом параметре, запишется во временный файл с именем ~Xcopy.Tmp Для объяснения работы XCopy в командном окне наберите команду xcopy /? (полУчите хелп на экране) или xcopy /? >C:\_XCopy_Help.txt (хелп в файле C:\_XCopy_Help.txt) В файле ~Xcopy.Tmp я записал имя файла, который копироваться не будет (см. постановку задачи и ключи работы xcopy в хелпе) >Nul 1>Nul 2>Nul подавляет вывод на экран сообщений команды xcopy |
|
------- Отправлено: 19:09, 13-01-2012 | #4 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Помогите пожалуйста с написанием bat-ника. Он не сильно отличаться должен от ентого вроде как.
Написать пакетный файл, который будет копировать из текущего каталога все файлы с некоторым расширением, кроме одного файла, указанного в качестве второго параметра командной строки, в каталог, указанный первым параметром. Если имя каталога, в который должно производиться копирование, не задано, то вывести сообщение об этом и прервать выполнение файла Вот тут набросал из того что нашел - подскажите надо ли и если надо - где поправить? @Echo Off If '%1==' (Echo "Не указана папка для копирования" GoTo :Eof) xcopy *.txt %1\ If Not %ErrorLevel%==0 ( Echo Ошибка при копировании Pause GoTo :Eof ) Вот это проверил - работает - только не понимаю как выполнить вот это условие: кроме одного файла, указанного в качестве второго параметра командной строки |
|
Последний раз редактировалось Veseliy, 28-02-2012 в 23:29. Отправлено: 22:24, 28-02-2012 | #5 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать @Echo Off Set Mask=*.que If "%~1"=="" Cls & Echo Каталог для копирования не задан & Pause & GoTo :Eof Set OutDir=%~1::: Set OutDir=%OutDir:\:::=% Set OutDir=%OutDir::::=% If "%~2"=="" ( xcopy %Mask% "%OutDir%\" /Y /D ) Else ( Echo %~2>%0.NoCopy xcopy %Mask% "%OutDir%\" /Y /D /EXCLUDE:%0.NoCopy Del %0.NoCopy ) |
------- Последний раз редактировалось megaloman, 29-02-2012 в 20:29. Отправлено: 16:17, 29-02-2012 | #6 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Спасибо!
вроде во всем разобрался кроме вот этих строк: Set OutDir=%~1::: Set OutDir=%OutDir:\:::=% Set OutDir=%OutDir::::=% для чего вообще переменные заключены в %% и зачем столько : и для чего три строки? просто первой из этих не достаточно? |
Отправлено: 19:14, 29-02-2012 | #7 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Для чего вообще переменные заключены в %% - таков синтаксис в бат-файлах.
В параметре %1 в батник передаётся путь к папке, куда копируем файлы. Я попытался застраховаться от того, в каком виде этот путь передаётся: со слежом на конце или без него (например, C:\Tmp\ или C:\Tmp), чтобы в команде xcopy при копировании не возникла ошибка. Рассмотрим пример c полученным в переменной %1 путём: в первой строке OutDir примет значение C:\Tmp\::: или C:\Tmp::: (в зависимости от того, в каком виде Вы передали путь) (%~1 -~ убирает обрамляющие кавычки в пути, если Вы путь передаёте в кавычках, и никак не действует, если путь передаёте без них (см For /?)). Три : -так как в имени файла (папки) такой последовательности в принципе быть не может (хватило бы и двух : ) во второй строке последовательность \::: заменим на пустую (см. Set /?), то есть OutDir примет значение C:\Tmp или C:\Tmp::: в третей строке последовательность ::: заменим на пустую, то есть OutDir примет значение C:\Tmp Мы гарантированно получаем путь без слэжа на конце. Вот еще один способ проделать указанное действие Set OutDir=%~1 If %OutDir:~-1%==\ Set OutDir=%OutDir:~0,-1% Поясняю If: Если последний символ пути равен \ то в переменную вырезаем всё, кроме последнего символа Кстати, для более эффективного выполнения в Xcopy уместно добавить ключ /D чтобы копировались только более свежие файлы, и, если Вы твёрдо уверены, в каком виде передаёте путь, то можно вообще не определять переменную OutDir. Если без \, то @Echo Off Set Mask=*.que If "%~1"=="" Cls & Echo Каталог для копирования не задан & Pause & GoTo :Eof If "%~2"=="" ( xcopy %Mask% "%~1\" /Y /D ) Else ( Echo %~2>%0.NoCopy xcopy %Mask% "%~1\" /Y /D /EXCLUDE:%0.NoCopy Del %0.NoCopy ) |
------- Последний раз редактировалось megaloman, 29-02-2012 в 20:27. Отправлено: 19:58, 29-02-2012 | #8 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Спасибо огромное !!! Все понял
|
Отправлено: 20:37, 29-02-2012 | #9 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Здравствуйте! Я тут переделала уже сделанный батник
Цитата megaloman:
@echo off Set file_exception = %1 Set direct= %2 if '%2==' goto: Eof for %%a in ( %CD%\*.txt ) do (xcopy %%a %2\/D/Y/Exclude:%1) if %ErrorLevel% ==1 (echo Error of copy! pause goto: Eof ) pause но он не запускается почему то....не могу понять в чем проблема, пишет "Ошибка в синтаксисе команды"....что я не правильно написала?? |
|
Отправлено: 00:31, 06-05-2012 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Вывод имени текущего пользователя | Sadowod | Скриптовые языки администрирования Windows | 24 | 27-12-2012 10:13 | |
Разное - [решено] Запуск cmd от имени текущего пользователя | McLotos | Microsoft Windows 2000/XP | 3 | 25-01-2011 11:25 | |
CMD/BAT - Получение текущего IP и перенос полученного значения на сайт | steff | Скриптовые языки администрирования Windows | 1 | 10-12-2010 11:09 | |
Игра Civilization V выйдет осенью текущего года | OSZone News | Новости информационных технологий | 0 | 19-02-2010 21:30 | |
Прочие БД - [решено] Чтение текущего пользователя в строку | ЕвгенийN | Программирование и базы данных | 1 | 23-05-2008 06:01 |
|