Показать полную графическую версию : [решено] копирование BAT
на диске C: есть папка C:\LOGO\555
в папке 555 есть 3 файла
1.cfg
2.so
3.BIN
как скопировать эти 3 файла в другую папку и под папки в ней с заменой этих файлов если существуют C:\LOGO\new\launch\968000000000
да это папка 968000000000
в ней 100 разных папок в эти папки мне и надо скопировать эти 3 файла если они там есть то с заменой
megaloman
27-10-2016, 10:49
@Echo Off
Set "InBox=C:\LOGO\555"
Set "OutBox=C:\LOGO\new\launch\968000000000"
Pushd %InBox%
Xcopy "1.cfg" "%OutBox%\" /Y /D /R /H /C /K >nul
Xcopy "2.so" "%OutBox%\" /Y /D /R /H /C /K >nul
Xcopy "3.bin" "%OutBox%\" /Y /D /R /H /C /K >nul
FOR /F "usebackq delims=" %%d IN (`Dir /B /A:D 2^>nul`) DO (
Xcopy "%%d" "%OutBox%\%%d\" /Y /D /E /R /H /C /K >nul
)
popd
GoTo :Eof Обратите внимание на ключ /D в команде Xcopy: копируются только те файлы, которые новее в исходной папке. Это существенно ускорит процесс. Если Вам каждый раз хочется копировать с перезаписью абсолютно всё - этот ключ уберите.
пишет неправильно указан диск в чем проблема
работает разобрался изменил букву названия диска С: с большой на маленькую с:
но осталась одна проблема эти 3 файла он копирует в папку 968000000000
а мне надо скопировать эти 3 файла с заменой в папки их порядка 100 штук которые находяться в папке 968000000000
@Echo Off
Set "InBox=с:\LOGO\555"
Set "OutBox=с:\LOGO\new\launch\968000000000"
Pushd %InBox%
Xcopy "1.cfg" "%OutBox%\" /Y /D /R /H /C /K >nul
Xcopy "2.so" "%OutBox%\" /Y /D /R /H /C /K >nul
Xcopy "3.bin" "%OutBox%\" /Y /D /R /H /C /K >nul
FOR /F "usebackq delims=" %%d IN (`Dir /B /A:D 2^>nul`) DO (
Xcopy "%%d" "%OutBox%\%%d\" /Y /D /E /R /H /C /K >nul
)
popd
GoTo :Eof
megaloman
28-10-2016, 05:10
55kadi, я, похоже, неверно понял задачу. Мой скрипт из папки 555 берёт 3 файла и все подпапки в ней и копирует в папку 968000. А что нужно Вам? Взять из папки 555 три файла и скопировать их во все подпапки папки 968000? А если в этих папках есть тоже подпапки более глубокого уровня, то и туда копировать тоже?
О букве "c" в имени диска- неважно, большая она или маленькая, главное, чтобы она была латинская а не русская, вполне возможно, что это я виноват- у меня при отладке была другая буква диска, не C.
Взять из папки 555 три файла и скопировать их во все подпапки папки 968000
megaloman
28-10-2016, 06:21
@Echo Off
Set "InBox=C:\LOGO\555"
Set "InFile="1.cfg" "2.so" "3.bin""
Set "OutBox=C:\LOGO\new\launch\968000000000"
FOR /F "usebackq delims=" %%d IN (`Dir "%OutBox%" /B /A:D 2^>nul`) DO (
FOR %%f IN (%InFile%) DO (
Copy "%InBox%\%%~f" "%OutBox%\%%d\" >nul
)
)
@Echo Off
Set "InBox=C:\LOGO\555"
Set "InFile="1.cfg" "2.so" "3.bin""
Set "OutBox=C:\LOGO\new\launch\968000000000"
FOR /F "usebackq delims=" %%d IN (`Dir "%OutBox%" /B /A:D 2^>nul`) DO (
FOR %%f IN (%InFile%) DO (
Xcopy "%InBox%\%%~f" "%OutBox%\%%d\" /Y /D >nul
)
)
Должен заметить, что если файлы 1,2,3 заняты, то занятый файл скопирован и перезаписан не будет.
megaloman
28-10-2016, 18:41
не работает@Echo Off
Set "InBox=C:\LOGO\555"
Set "InFile="1.cfg" "2.so" "3.bin""
Set "OutBox=C:\LOGO\new\launch\968000000000"
Dir "%OutBox%" /A:D >"%InBox%\%~nx0.LOG"
Dir "%InBox%\?.*" /A:-D >>"%InBox%\%~nx0.LOG"
FOR /F "usebackq delims=" %%d IN (`Dir "%OutBox%" /B /A:D 2^>nul`) DO (
Echo ----- "%OutBox%\%%d\" >>"%InBox%\%~nx0.LOG"
FOR %%f IN (%InFile%) DO (
Echo Copy "%InBox%\%%~f" "%OutBox%\%%d\" >>"%InBox%\%~nx0.LOG"
Copy "%InBox%\%%~f" "%OutBox%\%%d\" >nul
)
)Кстати, а файлы реально называются ="1.cfg" "2.so" "3.bin" или у них иные имена? Если иные, надо честно их указать
Из вашего скриншота следует, что:
или нет подпапок в папке C:\LOGO\new\launch\968000000000
или нет файлов "1.cfg" "2.so" "3.bin" в папке C:\LOGO\555
megaloman,
надо поправить "%InBox%\%~0.LOG" »
megaloman
28-10-2016, 23:36
alpap, Копирую к себе скрипт, запускаю, работает. Я не вижу, что надо поправлять. Попробуйте - получится! Мой лог предоставляю.
Я не вижу, что надо поправлять »
вот это: 140826
вероятно ТС тоже запускает извне.
megaloman
29-10-2016, 00:25
alpap, Спасибо. Запомню. Странно, что по разному отрабатывает %~0 для запуска из Far и с рабочего стола.
55kadi, Итак, в отладочном варианте вместо %~0 надо писать %~nx0
В отладочном варианте скрипта поправил. Проделайте, пожалуйста.
Странно, что по разному отрабатывает %~0 для запуска из Far и с рабочего стола. »
В смысле?
megaloman
29-10-2016, 00:58
Iska, При запуске батника из папки из фара %~0 выдаёт имя.расширение, а с рабочего стола или из проводника Путь\имя.расширение
Iska, При запуске батника из папки из фара %~0 выдаёт имя.расширение, а с рабочего стола или из проводника Путь\имя.расширение »
Да ну?!
http://i.imgur.com/zfD6CUb.png
megaloman
29-10-2016, 08:36
Iska, У меня, конечно, FAR старый ...
Если в командном окне перейти в папку, где хранится батник, то %~0 тоже выдаст имя.расширение без пути
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.