Войти

Показать полную графическую версию : batch file - определить букву флеш-диска


simon171078
22-10-2008, 12:04
как сделать batch file который копировал на usb брелок ,сложность такая узнать какая буква будет у usb брелка

Petya V4sechkin
22-10-2008, 12:15
simon171078, не совсем понял.

Dirk Diggler
22-10-2008, 12:30
Пока только приходит в голову использовать diskpart
diskpart /?

ab57
22-10-2008, 12:41
Если ваш bat-файл запускается с USB-диска, то переменная %~d0 принимает значение буквы
диска. copy c:\myfile.txt %~d0\myusbdir\*.*
Создайте батник с содержимым :
ECHO Диск файла= %~d0
и все станет ясно.

Pavlushka66
02-12-2010, 08:18
в общем при помощи небольшого костыля сделал такой батник - можете почитать как здесь (http://pavlushka66.blogspot.com/2010/12/blog-post.html)
Скачать рабочий пример можно вот здесь (http://dl.dropbox.com/u/746529/examle.zip)

SendMessage
05-12-2010, 08:26
как сделать batch file который копировал на usb брелок ,сложность такая узнать какая буква будет у usb брелка »
Мне кажется это проблем не должно вызывать.
@echo off
set "SourceFile=pathfile"
for /f %%a in ('wmic logicaldisk where drivetype^=2 get name') do copy /y %SourceFile% %%a
Скопирует на все подключенные флэшки.

Busla
05-12-2010, 14:55
Pavlushka66, в этом твоём "здесь" никакого "как" не написано, фактически получается: "качайте исходник, разбирайтесь сами". В данной редакции выглядит как попытка продвинуть свой бложик.

В реальной практике я бы твой подход поостерёгся использовать - далёк от универсальности. Если речь идёт о конкретной флешке, я бы её идентифицировал по метке диска, а так велик шанс загнать файл на карточку от фотика или на телефон.

Пользователям лучше не редактировать сам файл, а предусмотреть параметры запуска.

Pavlushka66
06-12-2010, 06:48
SendMessage красивое решение... спасибо

Busla вопрос в том что к нам в отдел каждый день приходят люди из наших филиалов(которых около 60 по области), разные люди с разными флешками, на эти флешки мы скидываем одни и те же файлы, на компах нет ни карт-ридеров ничего подобного, казалось бы взять ту букву диска на которую у тебя монтируется флешка да написать батник на нее но, в отделе несколько человек, и у каждого флешка подрубается с разной буквой, делали несколько батников, в результате при изменении путей или еще чего-то каждый менял только свой батник и они быстро шли в рассинхрон..
нужно было сделать чтото, что бы работало, я это сделал, да некрасиво, да коряво, но в данном случае вполне достаточно, и главное что работало... и я решил поделиться потому как сам долго рыл инет в поисках ответа

El Sanchez
06-12-2010, 18:40
SendMessage, я бы добавил бы еще в сортировку свойство mediatype, дабы не копировать на флоппи, и какой-никакой пользовательский интерфейс :)

@Echo Off
Set Source=C:\temp\list.log

SetLocal EnableDelayedExpansion
For /F "Tokens=2 Delims==" %%A In ('WMIC LogicalDisk Where ^(DriveType^=2 And MediaType^=NULL^) Get Name /Value') Do (
Set /A Cnt+=1
Set Usb!Cnt!=%%A
Echo.!Cnt!. Copy to drive %%A
)
Echo.
Set /P "Answer=Please, select drive... "
Set Usb%Answer% 1>nul 2>&1&&Copy /Y "%Source%" !Usb%Answer%!||Echo Wrong choice. Try again.
EndLocal

sov44
10-02-2012, 20:22
Помогите поправить скрипт (пост выше), чтобы при запуске появлялось сообщение "вставьте флешку". После втыкания флешки, определялась её буква, появлялась надпись "скопировать файлы на флеш" и копировались на неё файлы.

AlterEgoFS
10-02-2012, 21:02
simon171078, for %%i in (C 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:\file set flash=%%i:

где file это папка/файл, лежащий только на этой флешке и нигде больше. используется для идентификации. я например создал в корне флешки пустой файл "flashdrive", у меня скрипт выглядит так

for %%i in (C 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:\flashdrive set flash=%%i:

можешь прям это и использовать. а дальше в батнике, используя новую переменную %flash%, делаешь что надо. взято из дистрибутива zverdvd )

пысы:если при использовании батника вылезет сообщение сообщение с тремя кнопками и у вас есть картридер встроенный, то тыкаем пропустить и всё. у меня так и было. батник натыкается на включенную флешку но физически она не подключена, хоть и висит в "моём компьютере" как подключенная. пропускать и всё

megaloman
11-02-2012, 00:01
Вот еще вариант. Идея решения - запускаем vbs-скрипт, который определяет сменные накопители в состоянии готовности в системе и запускает батник, для которого параметр - буква: сменного диска.
В VBS-скрипте я организовал подтверждение на выбор сменного диска (на случай, если их несколько)
Попутно выдаю информацию: метка тома, серийный номер, свободное место.
Если задача ставится - выбрать первый попавшийся накопитель, можно упростить скрипт (удалится более половины строк), чтобы он ничего не спрашивал.
' Скрипт находит сменные накопители на компьютере (кроме A:)
' Выдаёт диалог на выбор конкретного
' Запускает указанный батник с параметром - именем (путём) диска

Bat = "Batnik.bat" '- батник, который запускаетcя скриптом
'- если батник не рядом со скриптом-указать полный путь

Set WS = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Disks = FSO.Drives

L = True
For Each Disk In Disks
DPath = Disk.Path
If Disk.DriveType = 1 And Disk.IsReady And UCase(DPath) <> "A:" Then
Msg = "Сменный носитель " + Disk.Path
Msg = Msg + vbCrLf + vbCrLf + "Метка носителя: " + Disk.VolumeName
Msg = Msg + vbCrLf + "Серийный номер: " + CStr(Disk.SerialNumber)
Msg = Msg + vbCrLf + vbCrLf + "Свободное место: " + CStr(Round(Disk.FreeSpace / 1024 / 1024, 1)) + " Mb"
Msg = Msg + vbCrLf + vbCrLf + "Вы будете работать с этим носителем?"
Ans = MsgBox(Msg, 35, "Выбор сменного носителя")
If Ans = 2 Then Exit For
If Ans = 6 Then
L = False
Ret = WS.Run("cmd /c " + Bat + " " + DPath, 1, False)
Exit For
End If
End If
Next
If L Then MsgBox "Ни одного сменного носителя не выбрано"
Для примера использовал батник с именем Batnik.bat@Echo Off
Echo %1
Pause В прикреплённом файле - скрипт и пример батника

sov44
11-02-2012, 01:05
А как насчёт моего вопроса в формате cmd?

megaloman
11-02-2012, 23:34
sov44, Попробуйте вариант: Запускайте vbs-скрипт, он опросит имеющие сменные диски в состоянии готовности, запомнит их (если они есть), выдаст приглашение на подключение флэшки, определит появившуюся букву, запустит указанный Вами батник с параметром -буква диска: Пример батника в моём предыдущем посте
' Скрипт находит сменные накопители на компьютере (кроме A:)
' Выдаёт запрос на подключение нового, после подключения - опред его букву
' Запускает указанный батник с параметром - именем (путём) диска

Bat = "Batnik.bat" '- батник, который запускаетcя скриптом
'- если батник не рядом со скриптом-указать полный путь

Set WS = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Disks = FSO.Drives

iOld = ""
For Each Disk In Disks
DPath = UCase(Disk.Path)
If Disk.DriveType = 1 And Disk.IsReady And DPath <> "A:" Then iOld = iOld + UCase(Disk.DriveLetter)
Next

L = True
Do While L
Ans = MsgBox("Вставьте сменный носитель", 49)
If Ans = 2 Then Exit Do
If Ans = 1 Then
Set Disks = FSO.Drives
For Each Disk In Disks
DPath = UCase(Disk.Path)
If Disk.DriveType = 1 And Disk.IsReady And DPath <> "A:" Then
If InStr(1, iOld, UCase(Disk.DriveLetter), 1) = 0 Then
L = False
Ret = WS.Run("cmd /c " + Bat + " " + DPath, 1, False)
Exit For
End If
End If
Next
End If
Loop

Foreigner
12-02-2012, 09:25
сложность такая узнать какая буква будет у usb брелка »

Букву можно определить так:

wmic logicaldisk where drivetype=2 get deviceid




© OSzone.net 2001-2012