Войти

Показать полную графическую версию : [решено] копирование BAT


Страниц : [1] 2

55kadi
27-10-2016, 01:08
на диске C: есть папка C:\LOGO\555
в папке 555 есть 3 файла
1.cfg
2.so
3.BIN
как скопировать эти 3 файла в другую папку и под папки в ней с заменой этих файлов если существуют C:\LOGO\new\launch\968000000000

55kadi
27-10-2016, 01:24
да это папка 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: копируются только те файлы, которые новее в исходной папке. Это существенно ускорит процесс. Если Вам каждый раз хочется копировать с перезаписью абсолютно всё - этот ключ уберите.

55kadi
27-10-2016, 19:49
пишет неправильно указан диск в чем проблема

55kadi
28-10-2016, 01:11
работает разобрался изменил букву названия диска С: с большой на маленькую с:

но осталась одна проблема эти 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.

55kadi
28-10-2016, 05:36
Взять из папки 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 заняты, то занятый файл скопирован и перезаписан не будет.

55kadi
28-10-2016, 17:14
не работает

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

55kadi
28-10-2016, 22:22
LOG-файл не создаеться

alpap
28-10-2016, 22:44
megaloman,
надо поправить "%InBox%\%~0.LOG" »

megaloman
28-10-2016, 23:36
alpap, Копирую к себе скрипт, запускаю, работает. Я не вижу, что надо поправлять. Попробуйте - получится! Мой лог предоставляю.

alpap
29-10-2016, 00:08
Я не вижу, что надо поправлять »
вот это: 140826
вероятно ТС тоже запускает извне.

megaloman
29-10-2016, 00:25
alpap, Спасибо. Запомню. Странно, что по разному отрабатывает %~0 для запуска из Far и с рабочего стола.
55kadi, Итак, в отладочном варианте вместо %~0 надо писать %~nx0
В отладочном варианте скрипта поправил. Проделайте, пожалуйста.

Iska
29-10-2016, 00:41
Странно, что по разному отрабатывает %~0 для запуска из Far и с рабочего стола. »
В смысле?

megaloman
29-10-2016, 00:58
Iska, При запуске батника из папки из фара %~0 выдаёт имя.расширение, а с рабочего стола или из проводника Путь\имя.расширение

55kadi
29-10-2016, 01:49
log

Iska
29-10-2016, 02:04
Iska, При запуске батника из папки из фара %~0 выдаёт имя.расширение, а с рабочего стола или из проводника Путь\имя.расширение »
Да ну?!
http://i.imgur.com/zfD6CUb.png

megaloman
29-10-2016, 08:36
Iska, У меня, конечно, FAR старый ...
Если в командном окне перейти в папку, где хранится батник, то %~0 тоже выдаст имя.расширение без пути




© OSzone.net 2001-2012