Показать полную графическую версию : [решено] bat файл, копирование с флэшки
Discount
13-05-2014, 20:41
Допустим надо скопировать файлы из папок, которые на флэшке, на жёсткие диски Windows - с этим трудностей не возникает. А возникает вот в чём, что вставля эту самую флэху в разные компьюетры, то мы получаем изменчивую букву почти на каждой машине, то наша флэшка имеет букву G, на другом H, на третем например J, на чётвёртом ещё как-нибудь назовётся. Как тогда быть с сценарием бат файла?
Discount, сценарий на самой флэшке лежит?
setlocal
set FlashLetter=%~d0
copy "FlashLetter\folder\*.*" C:\temp\
скопирует все файлы из папки folder, лежащей в корне флэшки, с которой запущен батник, в папку c:\temp (папка назначения должна существовать; можно сделать в батнике перед командой копирования проверку на её существование и создание её в случае, если она отсутствует).
Discount
14-05-2014, 13:15
Код:
setlocal
set FlashLetter=%~d0
copy "FlashLetter\folder\*.*" C:\temp\
скопирует все файлы из папки folder, лежащей в корне флэшки, с которой запущен батник, в папку c:\temp (папка назначения должна существовать; можно сделать в батнике перед командой копирования проверку на её существование и создание её в случае, если она отсутствует). »
Спасибо огромное! Если я всё правильно понял, в корне флэхи допустим есть папка folder с моими файлами. Надо все эти файлы копирнуть в несуществующую папку (т.е. её надо создать батником), то в итоге получаем такой скрипт?
setlocal
set FlashLetter=%~d0
MD C:\FolderName
copy "FlashLetter\folder\*.*" C:\FolderName\
???
megaloman
14-05-2014, 19:17
Если батник на том же диске (в частности, флэшке), что и копируемые файлы, можно указать полный путь к файлам без указания диска @Echo Off
Set "DirOut=D:\Жил был у бабушки\avz4\Base\"
Set "FileIn=\У попа была собака\Base\*.*"
Md "%DirOut%"
If Exist "%DirOut%" (
Copy "%FileIn%" "%DirOut%"
) Else (
Echo Папка для копирования не создана
Pause
)
Discount
14-05-2014, 19:22
Если батник на том же диске (в частности, флэшке), что и копируемые файлы, можно указать полный путь к файлам без указания диска
Код:
@Echo Off
Set "DirOut=D:\Жил был у бабушки\avz4\Base\"
Set "FileIn=\У попа была собака\Base\*.*"
Md "%DirOut%"
If Exist "%DirOut%" (
Copy "%FileIn%" "%DirOut%"
) Else (
Echo Папка для копирования не создана
Pause
)
------- »
Если честно немного не понял код, можешь поподробней пожалуйста.
Да, батник лежит в корне флешки.
Кстати с первым кодом что то не получается(
Discount
14-05-2014, 20:54
получилось с помощью команд
xcopy "%~d0:\Мои файлы\Local" "D:\Data" /c /i /d /e /h /y
Всем спасибо!)
Можно закрывать
xcopy "%~d0:\ »
Моя ошибка: FlashLetter -- переменная окружения, и третья строка должна была выглядеть как:
copy "%FlashLetter%\folder\*.*" C:\temp\
(со знаками процента; причём при тестировании у себя я их ставил -- а тут упустил... :sorry: )
А переменная %~d0 возвращает букву диска или флэшки уже с двоеточием после неё; можете проверить, запустив батник:setlocal
set FlashLetter=%~d0
echo %FlashLetter%
pause-- во второй и третьей строках буква диска, с которого запущен батник, будет уже с этим двоеточием.
megaloman
15-05-2014, 12:42
Если честно немного не понял код
определяю куда будем копировать файлы Set "DirOut=D:\Жил был у бабушки\avz4\Base\"
определяем откуда копируем Set "FileIn=\У попа была собака\Base\*.*"
пытаемся создать папку куда копировать Md "%DirOut%"
если папка существует (создана) If Exist "%DirOut%" (
то копируем Copy "%FileIn%" "%DirOut%"
иначе ) Else (
выдаём аварийное сообщение Echo Папка для копирования не создана
и останавливаемся, чтобы его прочесть Pause
Если использовать xcopy, то без проверки возможности копирования в указываемое место можно записать
XCopy "%FileIn%" "%DirOut%" /D /H /-Y
Или, как у Вас,
xcopy "\Мои файлы\Local\*.*" "D:\Data\" /c /i /d /e /h /y
Смысл моего сообщения был в том, чтоЕсли батник на том же диске (в частности, флэшке), что и копируемые файлы, можно указать полный путь к файлам без указания диска причём батник не обязательно в корне диска.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.