Показать полную графическую версию : [решено] Автоматическое определение буквы флешки
crazydog
18-07-2019, 20:51
Уважаемые форумчане. Помогите решить задачу. Для автоматизации рутинной ежедневной задачи используется bat файл.
Одна из задач - копирование определенных файлов на флешку. Задача выполняется на абсолютно разных компьютерах.
Соответственно буква диска каждый раз разная. Сейчас используется так SET /p FLASH=ФЛЕШ:
Каждый раз букву диска необходимо ввести с клавиатуры (например F).
Можно ли определить флешку по наличию определенных файлов/папок?
Сейчас используется так »
Где расположено это «так»?
crazydog
18-07-2019, 22:27
Где расположено это «так»? »
SET LINK=%~dp0
SET /p FLASH=ФЛЕШ:
xcopy "%LINK%\REPORT\*.*" "%FLASH%:\REPORT\" /H /R /K /Y
Не совсем тот ответ, которого я ожидал, но я Вас понял.
У Вас есть машины, есть некий каталог на этих машинах, в этом каталоге будет располагаться пакетный файл с указанным кодом, исполняя который произвольным образом, Вы хотите добиться того, чтобы не требовалось указывать букву раздела флэш-накопителя, так? Тогда, да, можно, например, использовать:
определить флешку по наличию определенных файлов/папок? »
можно ориентироваться на метку раздела, можно ориентироваться на volume serial number…
Тупо ориентируемся на некий каталог и файл в нём на одном или нескольких флэш-накопителях (для реального применения уберите echo):
@echo off
setlocal enableextensions enabledelayedexpansion
set sPath2File=\0075\Sample.txt
for /f "usebackq delims=" %%i in (
`2^>nul "wmic.exe" LogicalDisk where "DriveType = 2 AND MediaType = null" get DeviceID /value ^| find.exe /i "DeviceID"`
) do for /f "usebackq delims=" %%j in ('%%i') do (
set "s%%j"
if defined sDeviceID if exist "!sDeviceID!%sPath2File%" echo xcopy.exe "%~dp0REPORT\*.*" "!sDeviceID!\REPORT\" /H /R /K /Y
)
endlocal
exit /b 0
Patroklos
19-07-2019, 08:05
Вот простой и надёжный вариант.
@echo off
Title .NET Framework 3.5 Offline Installer
for %%I in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%I:\\sources\install.wim" set setupdrv=%%I
if defined setupdrv (
echo Found drive %setupdrv%
echo Installing .NET Framework 3.5...
Dism /online /enable-feature /featurename:NetFX3 /All /Source:%setupdrv%:\sources\sxs /LimitAccess
echo.
echo .NET Framework 3.5 should be installed
echo.
) else (
echo No installation media found!
echo Insert DVD or USB flash drive and run this file once again.
echo.
)
pause
Или более надежный вариант - забить на копирование на флешку и скриптом копировать данные на какой-нибудь дропбокс, гуглодиск или onedrive. И\или архивировать и почтой самому себе слать.
Бэкап на флешке это не бэкап, это чертишо потому что флешки это расходник и мрут как мухи в самый неподходящий момент.
megaloman
19-07-2019, 10:07
Тупо ориентируемся на некий каталог »Еще вариант@Echo Off
cls
Set "From=%~dp0Report\*.*"
Set "To=\Report\"
Set /A Nflash=0, NflashTo=0
FOR /F "usebackq tokens=1 skip=1 delims=:" %%i IN (`"wmic logicaldisk where drivetype="2" get caption | FINDSTR /R /C:"[A-Z]""`) DO (
Set /A Nflash+=1
If Exist "%%i:\%To%" (
Set /A NflashTo+=1
Xcopy "%From%" "%%i:\%To%" /H /R /K /Y /F
)
)
If %Nflash%==0 (Echo !!! Flash drives not found &Pause &Exit /B 2)
If %NflashTo%==0 (Echo !!! Flash drives with "%To%" not found &Pause &Exit /B 2)
pause
Exit /B
При наличии нескольких флэшек с целевой папкой копии сделаются на все
Не проверял, но, помнится, с внешним USB HDD работать не будет (там drivetype="5")
crazydog
19-07-2019, 15:05
Или более надежный вариант - забить на копирование на флешку и скриптом копировать данные на какой-нибудь дропбокс, гуглодиск или onedrive. И\или архивировать и почтой самому себе слать. »
Данный вариант не очень подходит:
1. На компьютерах у клиентов запрещено устанавливать софт
2. Не у всех есть интернет (либо правила информационной безопасности)
Всем спасибо за обсуждение, ответ с №7 посчитал самым оптимальным. (№4 тоже хороший вариант)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.