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

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

simon171078 22-10-2008 12:04 930400

batch file - определить букву флеш-диска
 
как сделать batch file который копировал на usb брелок ,сложность такая узнать какая буква будет у usb брелка

Petya V4sechkin 22-10-2008 12:15 930408

simon171078, не совсем понял.

Dirk Diggler 22-10-2008 12:30 930427

Пока только приходит в голову использовать diskpart
diskpart /?

ab57 22-10-2008 12:41 930437

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

Pavlushka66 02-12-2010 08:18 1556384

в общем при помощи небольшого костыля сделал такой батник - можете почитать как здесь
Скачать рабочий пример можно вот здесь

SendMessage 05-12-2010 08:26 1558601

Цитата:

Цитата simon171078
как сделать 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 1558775

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

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

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

Pavlushka66 06-12-2010 06:48 1559300

SendMessage красивое решение... спасибо

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

El Sanchez 06-12-2010 18:40 1559706

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 1855814

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

AlterEgoFS 10-02-2012 21:02 1855848

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 1855966

Вложений: 1
Вот еще вариант. Идея решения - запускаем 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 1856003

А как насчёт моего вопроса в формате cmd?

megaloman 11-02-2012 23:34 1856613

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 1856730

Цитата:

Цитата simon171078
сложность такая узнать какая буква будет у usb брелка »

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

wmic logicaldisk where drivetype=2 get deviceid


Время: 16:56.

Время: 16:56.
© OSzone.net 2001-