Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Определение имени внешнего флеш-накопителя и копирование с него файлов (http://forum.oszone.net/showthread.php?t=347942)

fozan 10-02-2021 15:54 2949595

Определение имени внешнего флеш-накопителя и копирование с него файлов
 
Здравствуйте, столкнулся на работе с таким вопросом, имеется много флешек с файлами, нужно скопировать все файлы с флешки в заготовленную папку на компьютере, с копированием сложности нету

@Echo
xcopy H:\ C:\Users\Администратор\Desktop\Files /f /i /y /s

Вопрос возникает в том, что вставля флешку в разные компюютеры, мы получаем разные буквы, может быть и G, на другом H. Как сделать так, чтобы буква вставленной флешки определялась автоматически. Пытался найти в интернете способы, но практически везде все сводится к тому, что на флешке ищется определенный файл и так определяется буква. К сожалению, это для меня это не является решением, т.к. флешки разные, файлы меняются

Fors1k 10-02-2021 16:54 2949599

Код:

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 2949607

fozan,
Цитата:

Цитата 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

Fors1k, что-то у меня не срослось
Цитата:

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 2949616

Цитата:

Цитата megaloman
Подозреваю, моей версии 5.1.14409.1018 не хватает. »

Get-Disk с powershell v3.0

Iska 10-02-2021 20:47 2949618

Цитата:

Цитата fozan
имеется много флешек с файлами, нужно скопировать все файлы с флешки в заготовленную папку на компьютере, с копированием сложности нету »

USBDeview. Это проще всего. Настраиваете в нём запуск кода для копирования на событие монтирования логического диска. Общий принцип описан здесь (код там, естественно, другой).

alpap 10-02-2021 21:48 2949626

Цитата:

Цитата Foreigner
Get-Disk с powershell v3.0 »

проблема вероятно не в версии PS, а ОС. У меня Windows 7 x64 и этого (как и многих других и особенно жалко сетевых) командлета также нет. Приходится крутится то через wmic, то через Net.

Fors1k 10-02-2021 22:01 2949631

Да, Get-Disk присутствует в win 8+

DJ Mogarych 11-02-2021 13:48 2949700

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/win...32-logicaldisk

Fors1k 11-02-2021 13:59 2949704

Цитата:

Цитата DJ Mogarych
после этого всё будет. »

Думаешь у alpap не последняя версия powershell?))
Код:

param(
   
$path = "C:\Users\Администратор\Desktop\Files"
)
cls

$USB = (gwmi Win32_Volume -Fil "DriveType=2").name
Copy-Item -path "$USB*"-Destination $path -Recurse


alpap 11-02-2021 16:54 2949735

Fors1k, кстати, у меня алиас (Get-WmiObject) gwmi не хочет работать, только указанием полного имени командлета, это как-то поправимо?
Причем в Powershell ISE работает, а в PowerShell 7.1.1 подсвечивает говоря что видит, но именно в виде gwmi не хочет ('gwmi' не распознается как имя командлета, функции, файла сценария или исполняемой программы), при написании: Get-WmiObject - пожалуйста.
Не люблю когда что-то не работает.

Fors1k 11-02-2021 17:22 2949746

Цитата:

Цитата alpap
Не люблю когда что-то не работает. »

Я тоже, по-этому пользуюсь v5.1))
p.s.
Ответь уже мне здесь, наконец :)

DJ Mogarych 11-02-2021 17:34 2949751

Цитата:

Цитата alpap
gwmi не хочет работать »

Видать, они его выкинули как устаревший. gcim работает.
Или просто забыли про него :)

alpap 11-02-2021 21:36 2949781

Цитата:

Цитата DJ Mogarych
gcim работает »

да, спасибо!

Цитата:

Цитата Fors1k
по-этому пользуюсь v5.1 »

он более неповоротлив и достаточно прожорлив, мне как-то в pwsh удобнее и подсказки мне даже мешают больше (без них и запоминается хоть что-то к тому же). Ну тут, как говорится: на вкус и цвет фломастеры ...


Время: 14:39.

Время: 14:39.
© OSzone.net 2001-