Как скопировать файл с USB-накопителя на диск C в Windows 10 с помощью пакетного файла?

У меня есть файлы на USB-накопителе, которые нужно скопировать на несколько компьютеров. Эти файлы содержат исполняемый файл, который будет использовать другие файлы конфигурации. Моя проблема в том, что для ПК с Windows 10 при создании папки temp_folder ни один из файлов не копируется.

Для Windows 7 мне удалось создать пакетный файл, который копировал файлы на локальный диск и запускал исполняемый файл с помощью файлов конфигурации.

Содержимое пакетного файла было следующим:

mkdir C:\temp_installer
copy ".\file_name" "C:\temp_installer"
<rest of the code>

Я пробовал использовать xcopy и robocopy, но все еще вижу запуск командного файла и просто останавливаюсь на создании папки. Та же проблема не наблюдается в Windows 7.

Кто-нибудь пробовал это или может кто-нибудь сказать мне, что я могу делать неправильно?


person s_om    schedule 09.05.2019    source источник
comment
Где вы запускаете скрипт? .\имя_файла — это относительный путь. Вы создаете temp_installer в том же каталоге, из которого копируете, и, предположительно, ваш файл копируется в файл (не каталог) с именем C:\temp_installer   -  person vll    schedule 09.05.2019
comment
вы запускаете этот скрипт прямо с USB? Кажется, что вы запускаете его с самого USB, если это так, он бы не работал и в Windows 7 из-за того, что вы mkdir на самом USB. В любом случае опубликую решение как ответ.   -  person Gerhard    schedule 09.05.2019
comment
Используя любой из XCopy или его преемника, RoboCopy, вы можете скопировать и создать каталог в одной команде. Конечно, желательно, чтобы вы попытались сделать это в месте, где у вас есть достаточные привилегии, Windows предоставляет как системные, так и пользовательские временные каталоги именно для этой цели.   -  person Compo    schedule 09.05.2019
comment
Извините, мне нужно исправить код в моем вопросе. команда mkdir запускается для создания каталога диска C   -  person s_om    schedule 09.05.2019


Ответы (2)


Это был бы лучший вариант, нам не нужно беспокоиться о проблемах с правами доступа в корневом каталоге C:.

@echo off
cd /d "%~dp0"
set "inst_dir=%temp%\temp_installer"
mkdir "%inst_dir%">nul 2>&1
for %%i in (*) do if not "%%i"=="%~nx0" copy /Y "%%i "%inst_dir%"
:# When completed, we can call execute the files from "%inst_dir%"

Цикл for не нужен, если честно, я делаю его только для того, чтобы не копировать сам файл .bat/.cmd в папку, так как он там был бы не нужен.

Или еще проще, без необходимости делать все вышеперечисленное, вы можете просто использовать robocopy

@echo off
cd /d "%~dp0"
robocopy /MIR .\ "%temp%\temp_installer"
person Gerhard    schedule 09.05.2019
comment
Спасибо, пока это работает, у меня теперь странная проблема. Когда я дважды щелкаю пакетный файл, все копируется, как и ожидалось. Однако, когда я запускаю от имени администратора, robocopy начинает копировать весь мой каталог Windows во вновь созданную папку. Не уверен, почему это происходит. - person s_om; 09.05.2019
comment
Ваш рабочий каталог меняется при запуске от имени администратора. - person Gerhard; 10.05.2019
comment
круто, если вы хотите понять, зачем создавать новую партию и добавлять echo %cd%, затем следующую строку echo %~dp0 и последнюю строку pause. затем запустите его от имени администратора, чтобы увидеть результаты и понять, почему мы делаем cd /d %~dp0. Затем вы можете открыть cmd.exe и запустить call /?, чтобы узнать все, что вам нужно о замене параметров партии. :) удачи в вашем проекте. - person Gerhard; 10.05.2019

Powershell — ваш друг, попробуйте следующее:

Copy-Item E:\Document\ C:\Temp\Document\ -R

У меня отлично работает, и он даже создает каталог назначения, а также Copy-Item имеет alias cp и copy.

Если вы запускаете какой-то скрипт, у вас могут возникнуть проблемы с Execution-Policy: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy?view=powershell-6

person johnymachine    schedule 09.05.2019