![]() |
копировать из текущего каталога...
Доброго времени суток! Помогите написать Bat-файл:
Написать пакетный файл, который будет копировать из текущего каталога все файлы с расширением .txt, кроме одного файла, указанного в качестве первого параметра командной строки, в каталог, указанный вторым параметром. Переписывать только те файлы, которые новее одноименных в каталоге- приемнике. Если произошла ошибка копирования, выдать сообщение и прервать выполнение файла. |
Код:
@Echo Off |
Здравствуйте, я только осваиваю написание скриптов, и мне тоже необходимо копировать все файлы из папки крома одного конкретного файла
Не могли бы Вы, по детальнее объяснить по строчкам, какая команда что делает Цитата:
здесь тоже не все понятно: Цитата:
|
Цитата:
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 |
Помогите пожалуйста с написанием bat-ника. Он не сильно отличаться должен от ентого вроде как.
Написать пакетный файл, который будет копировать из текущего каталога все файлы с некоторым расширением, кроме одного файла, указанного в качестве второго параметра командной строки, в каталог, указанный первым параметром. Если имя каталога, в который должно производиться копирование, не задано, то вывести сообщение об этом и прервать выполнение файла Вот тут набросал из того что нашел - подскажите надо ли и если надо - где поправить? @Echo Off If '%1==' (Echo "Не указана папка для копирования" GoTo :Eof) xcopy *.txt %1\ If Not %ErrorLevel%==0 ( Echo Ошибка при копировании Pause GoTo :Eof ) Вот это проверил - работает - только не понимаю как выполнить вот это условие: кроме одного файла, указанного в качестве второго параметра командной строки |
Код:
@Echo Off |
Спасибо!
вроде во всем разобрался кроме вот этих строк: Set OutDir=%~1::: Set OutDir=%OutDir:\:::=% Set OutDir=%OutDir::::=% для чего вообще переменные заключены в %% и зачем столько : и для чего три строки? просто первой из этих не достаточно? |
Для чего вообще переменные заключены в %% - таков синтаксис в бат-файлах.
В параметре %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 |
Спасибо огромное !!! Все понял
|
Здравствуйте! Я тут переделала уже сделанный батник
Цитата:
@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 но он не запускается почему то....не могу понять в чем проблема, пишет "Ошибка в синтаксисе команды"....что я не правильно написала?? |
Violetta_, Надо быть аккуратнее в написании команд. В конкретном случае Вы исказили синтаксис for. Я не вник в смысл батника, поэтому нормально не тестировал результат, но как вариант (как пример синтаксиса)
Код:
@echo off И вообще, смысл организации цикла в Вашем батнике от меня ускользает - хватило бы одного xcopy *.txt ........... Я уже не говорю про корректность применения If Что вы хотите получить своим батником? |
Время: 16:48. |
Время: 16:48.
© OSzone.net 2001-