Показать полную графическую версию : Определение имени внешнего флеш-накопителя и копирование с него файлов
Здравствуйте, столкнулся на работе с таким вопросом, имеется много флешек с файлами, нужно скопировать все файлы с флешки в заготовленную папку на компьютере, с копированием сложности нету
@Echo
xcopy H:\ C:\Users\Администратор\Desktop\Files /f /i /y /s
Вопрос возникает в том, что вставля флешку в разные компюютеры, мы получаем разные буквы, может быть и G, на другом H. Как сделать так, чтобы буква вставленной флешки определялась автоматически. Пытался найти в интернете способы, но практически везде все сводится к тому, что на флешке ищется определенный файл и так определяется буква. К сожалению, это для меня это не является решением, т.к. флешки разные, файлы меняются
param(
$path = "C:\Users\Администратор\Desktop\Files"
)cls
$USB = (Get-Disk -UniqueId *USB*|Get-Partition).DriveLetter
copy "$USB`:\*" -Destination $path -Recurse
megaloman
10-02-2021, 19:24
fozan, вставля флешку в разные компюютеры, мы получаем разные буквы, может быть и G, на другом H. Как сделать так, чтобы буква вставленной флешки определялась автоматически. »Это как раз не проблема.@Echo Off
cls
Set "Out="
FOR /F "usebackq tokens=1,2 delims= " %%i IN (`"wmic logicaldisk where "drivetype^='2'" get caption, VolumeSerialNumber | FINDSTR /R /C:"[A-Z]""`) DO (
Call Set "Out=%%Out%%(%%i %%j) "
Set "Caption=%%i"
)
Echo %Out%
Echo %Caption%
Pause
Exit /B 0
Но если в компьютере уже вставлены флэшки, и Ваша не единственная. Какую выбрать? По содержимому Вы не позволяете её идентифицировать.
Вот вариант, если Вы знаете серийный номер флэшки (в предыдущем коде я специально вывожу соответствие буквы флэшки и её серийный номер), то её можно идентифицировать однозначно по нему и выбирать правильное устройство: @Echo Off
cls
Set "VolumeSerialNumber=0AB3A27C"
Set "Out="
FOR /F "usebackq tokens=1,2 delims= " %%i IN (`"wmic logicaldisk where "drivetype^='2' And VolumeSerialNumber^='%VolumeSerialNumber%'" get caption, VolumeSerialNumber | FINDSTR /R /C:"[A-Z]""`) DO (
Call Set "Out=%%Out%%(%%i %%j) "
Set "Caption=%%i"
)
Echo %Out%
Echo %Caption%
Pause
Exit /B 0
Get-Disk : The term 'Get-Disk' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:5 char:9
+ $USB = (Get-Disk -UniqueId *USB*|Get-Partition).DriveLetter
+ ~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-Disk:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Подозреваю, моей версии 5.1.14409.1018 не хватает.
Foreigner
10-02-2021, 20:09
Подозреваю, моей версии 5.1.14409.1018 не хватает. »
Get-Disk с powershell v3.0
имеется много флешек с файлами, нужно скопировать все файлы с флешки в заготовленную папку на компьютере, с копированием сложности нету »
USBDeview. Это проще всего. Настраиваете в нём запуск кода для копирования на событие монтирования логического диска. Общий принцип описан здесь (http://forum.oszone.net/post-1880940.html#post1880940) (код там, естественно, другой).
Get-Disk с powershell v3.0 »
проблема вероятно не в версии PS, а ОС. У меня Windows 7 x64 и этого (как и многих других и особенно жалко сетевых) командлета также нет. Приходится крутится то через wmic, то через Net.
Да, Get-Disk присутствует в win 8+
DJ Mogarych
11-02-2021, 13:48
Powershell
$path = "C:\Users\Администратор\Desktop\Files"
$usb = (gwmi Win32_LogicalDisk -filter "drivetype=2").DeviceID
copy "$usb\*" -Destination $path -Recurse
DriveType
Data type: uint32
Access type: Read-only
Qualifiers: MappingStrings ("Win32API|FileFunctions|GetDriveType")
Numeric value that corresponds to the type of disk drive this logical disk represents.
Unknown (0)
No Root Directory (1)
Removable Disk (2)
Local Disk (3)
Network Drive (4)
Compact Disc (5)
RAM Disk (6)
https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-logicaldisk
после этого всё будет. »
Думаешь у alpap не последняя версия powershell?))
param(
$path = "C:\Users\Администратор\Desktop\Files"
)cls
$USB = (gwmi Win32_Volume -Fil "DriveType=2").name
Copy-Item -path "$USB*"-Destination $path -Recurse
Fors1k, кстати, у меня алиас (Get-WmiObject) gwmi не хочет работать, только указанием полного имени командлета, это как-то поправимо?
Причем в Powershell ISE работает, а в PowerShell 7.1.1 подсвечивает говоря что видит, но именно в виде gwmi не хочет ('gwmi' не распознается как имя командлета, функции, файла сценария или исполняемой программы), при написании: Get-WmiObject - пожалуйста.
Не люблю когда что-то не работает.
Не люблю когда что-то не работает. »
Я тоже, по-этому пользуюсь v5.1))
p.s.
Ответь уже мне здесь (http://forum.oszone.net/post-2949409.html#post2949409), наконец :)
DJ Mogarych
11-02-2021, 17:34
gwmi не хочет работать »
Видать, они его выкинули как устаревший. gcim работает.
Или просто забыли про него :)
gcim работает »
да, спасибо!
по-этому пользуюсь v5.1 »
он более неповоротлив и достаточно прожорлив, мне как-то в pwsh удобнее и подсказки мне даже мешают больше (без них и запоминается хоть что-то к тому же). Ну тут, как говорится: на вкус и цвет фломастеры ...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.