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

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

ArmDeForcer 22-01-2011 23:43 1594957

Создание загручной флешки Window 7 с помощью командного файла
 
Написал командный файл, для автоматизации создания загрузочного USB-драйва с Windows 7, без стороннего софта.

Для работы нужна флешка, с объемом минимум 4Гб + инсталляционный диск Windows 7

Предупреждение: USB-драйв будет отформатирован под файловую систему NTFS!


Создаем командный файл с именем win72usb.cmd
(скачать готовый файл можно здесь)

запускать win72usb.cmd с правами администратора...
следовать инструкциям на экране...

(обновленный код - 27.1.2011)
читать дальше »

Код:

@echo off
@title CREATING WINDOWS 7 INSTALLATION USB-DRIVE
@mode con: cols=60 lines=20
color f1
echo.
echo =============================================
echo ^| CREATING WINDOWS 7 INSTALLATION USB-DRIVE ^|
echo ^|******** by ArmDeForcer (C) 2011 ********* ^|
echo ^|********* win72usb.cmd ver. 4.2 ********** ^|
echo =============================================
echo.
echo PLEASE FOLLOW THE ONSCREEN INSTRUCTIONS!
echo.
echo PLUG IN YOUR USB-DRIVE
pause
rem выбираем USB
@mode con: cols=127 lines=20
cls
echo.
echo LISTING EXISTING PHYSICAL DRIVES ON YOUR SYSTEM:
echo __________________________________________________________________________________________________________________________
wmic diskdrive list brief
echo __________________________________________________________________________________________________________________________
echo.
choice /c 0123456789 /m "ENTER YOUR USB-DRIVE DeviceID NUMBER (PHYSICALDRIVE#):"
set /a DRVnum=%ERRORLEVEL%-1

rem находим букву USB
@mode con: cols=60 lines=20
cls
echo.
setlocal EnableDelayedExpansion
set Q='wmic diskdrive where "Index="%DRVnum%" and Interfacetype="USB"" assoc /assocclass:Win32_DiskDriveToDiskPartition'
for /f "tokens=2,3,4,5 delims=,= " %%a in (%Q%) do (
set hd=%%a %%b, %%c %%d

call :_LIST_LETTER !hd!)
goto :_next

:_LIST_LETTER
(echo %1 |find "Disk ") >nul || goto :eof
for /f "tokens=3 delims==" %%a in ('WMIC Path Win32_LogicalDiskToPartition ^|find %1') do set TMP_letter=%%a
set Part_letter=%TMP_letter:~1,2%
echo YOU CHOOSED DRIVE %Part_letter% %1
goto :eof

:_next
echo.
rem проверяем на присутствие файла bootmgr на флешке
rem дабы избежать ошибки циклического копирования
if exist %Part_letter%\bootmgr del %Part_letter%\bootmgr /f /q
echo INSERT YOUR WINDOWS INSTALLATION DISK INTO DVD-DRIVE
pause
cls
rem проверяем на присутствие диска и находим букву DVD привода
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:\bootmgr set CDROM=%%i:

rem проверяем, существуют ли временный файл с таким именем, если да - стираем
if exist %%temp%%\script.txt del %%temp%%\script.txt /q

echo.
echo CREATING TEMP FILE... DONE^^!
rem создаем скрипт
echo select disk %%DRVnum%%>%temp%\script.txt
echo clean>>%temp%\script.txt
echo create partition primary>>%temp%\script.txt
echo select partition 1 >>%temp%\script.txt
echo active>>%temp%\script.txt
echo format fs=NTFS quick>>%temp%\script.txt
echo assign letter=%%Part_letter%%>>%temp%\script.txt
echo exit >>%temp%\script.txt
color f4
echo.
rem подтверждение перед форматированием флешки
echo WARNING^^! YOUR USB-DRIVE WILL BE FORMATED
echo TO NTFS FILE SYSTEM AND ALL DATA WILL BE LOST^^!
choice /C YN /M "ARE YOU SURE YOU WANT TO CONTINUE?:"
if errorlevel=2 Goto ex

:end
cls
color f1
rem сам процесс
echo.
echo WAIT, CREATING A BOOT DRIVE PARTITION...
diskpart /s %temp%\script.txt >nul
cls
echo.
echo CREATING A PARTITION COMPLETED^^!
cls
echo.
echo CREATING BOOT RECORD...
%CDROM%\Boot\bootsect.exe /nt60 %Part_letter%
cls
echo.
echo COPYING INSTALLATION FILES TO USB-DRIVE
echo PLEASE WAIT... (TO CANCEL PRESS CTRL+C)
rem копируем файлы по тихому
xcopy %CDROM% %Part_letter% /s /e /h /k /q
cls
echo.
echo DELETING TEMP FILES... DONE^^!
rem подтираем за собой
del %temp%\script.txt /q
echo.
echo DONE^^! YOUR USB-DRIVE IS READY TO USE^^!
echo PRESS ANY KEY TO FINISH^^!
pause
exit

:ex
cls
del %temp%\script.txt /q
echo.
echo ERROR^^! EXITING COMMAND FILE^^!
echo PRESS ANY KEY TO FINISH^^!
pause
exit

:eof



ЗЫ: Просьба, ногами сильно не бить! Если есть конкретные предложения по усовершенствованию батника - с удовольствием послушаю (прочту)...

Iska 23-01-2011 05:05 1595150

Павлины, Конкретные предложения, говоришь :)… Я бы начал с общих.

Код:

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:\bootmgr set CDROM=%%i:
У меня в корне раздела установленной «Windows 7» лежит «bootmgr». Если DVD не был вставлен (или не опознан, ошибка чтения и пр.) — что будет с переменной окружения «CDROM»?

P.S. В предположении, что мы запускаем пакетный файл из-под «Windows 7», ибо ниже есть упоминание «choice.exe», которая в XP отсутствует.

Следом ещё одна:
Код:

@echo off
Зачем вторично?!

Код:

echo list disk>c:\script1.txt
echo exit>>c:\script1.txt
echo 5. Wait for list of existing disks...
diskpart /s c:\script1.txt

Ну, а если нет «c:»?! Почему создаём не в положенном месте, «%temp%»? Вообще, имя файла («c:\script1.txt») лучше задать один раз, затем использовать переменную.

И, если уж вывод «diskpart» предлагается для последующего выбора, то его (вывод) стоит фильтровать, отображая ровно то, что является значимым для задачи.

Код:

choice /C 01234 /M "6. Choose your USB-drive number".
Предположение, что дисков может быть не более четырёх давно не соответствует истине. Во времена IDE на это ещё стоило полагаться, но нынче… Несерьёзно.

Код:

set FLASH=0
if errorlevel=5 Goto 1

…Длинная портянка кода…

:4
set FLASH=1
Goto end

:end

Проще что-то наподобие:
Код:

set /a FLASH=%ERRORLEVEL% - 1
Можно и без «%%», лишь бы расширенная обработка команд была включена.

Очередная, уже третья:
Код:

@echo off
Код:

echo clean>>c:\script2.txt

diskpart /s c:\script2.txt

А вот перед очисткой диска дополнительный запрос подтверждения необратимо деструктивных действий (с подсказкой) очень не помешал бы.

Сначала Вы пишете, что:
Цитата:

единственное - вначале батник просит создать текстовой файл с названием myusb.txt в корневой директории флешки, чтобы определить ее букву и не перепутать с другим диском...
а затем в скрипте «ручками» предлагаете указывать диск. Буквально на днях была тема по решению близкой задачи — найти взаимное соответствие Диск⇔Раздел⇔Логический диск. Переменные не очищаются, а команды «setlocal» нету, файл в корне диска C: создаётся и не удаляется. Зато «@echo off» целых три…

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

ArmDeForcer 23-01-2011 12:27 1595280

Цитата:

файл в корне диска C: создаётся и не удаляется. Зато «@echo off» целых три…
Спасибо. Подправлю... с @echo я переборщил, это когда куски тестил - забыл удалить...
Очень давно батники не писал..)) Недавно, сел и за час накатал, от нечего делать...
А временные файлы таки удаляются, в конце кода...

Цитата:

У меня в корне раздела установленной «Windows 7» лежит «bootmgr». Если DVD не был вставлен (или не опознан, ошибка чтения и пр.) — что будет с переменной окружения «CDROM»?
Диск С стоит удалить из поиска? Знаю, логики не хватает, просто батч просит вставить диск Windows перед тем как продолжать...
Все таки, цель была батник написать, а не целую программу... Хотя, можно и проверки вставить.

Цитата:

Цитата Iska
Предположение, что дисков может быть не более четырёх давно не соответствует истине. Во времена IDE на это ещё стоило полагаться, но нынче… Несерьёзно. »

вообще-то - 5 дисков, думал я про это...

Busla 23-01-2011 14:04 1595346

Зачем флешку в NTFS форматировать? Чем fat не подходит?
Одну команду в diskpart можно передать входящим потоком:
Код:

echo list disk | diskpart

ArmDeForcer 23-01-2011 21:14 1595665

Цитата:

Цитата Iska
Проще что-то наподобие:
Код:
set /a FLASH=%ERRORLEVEL% - 1 »

Супер! Благодарен!

Цитата:

Цитата Busla
Одну команду в diskpart можно передать входящим потоком:
Код:
echo list disk | diskpart »

Спасибо, полезно!

подредактировал
Цитата:

Цитата Iska
У меня в корне раздела установленной «Windows 7» лежит «bootmgr». Если DVD не был вставлен (или не опознан, ошибка чтения и пр.) — что будет с переменной окружения «CDROM»? »

Исправил... Удалил С:...

Цитата:

Цитата Iska
Ну, а если нет «c:»?! Почему создаём не в положенном месте, «%temp%»? Вообще, имя файла («c:\script1.txt») лучше задать один раз, затем использовать переменную. »

Задал...

Цитата:

Цитата Iska
Предположение, что дисков может быть не более четырёх давно не соответствует истине. Во времена IDE на это ещё стоило полагаться, но нынче… Несерьёзно. »

Добавил до 10...

Цитата:

Цитата Iska
А вот перед очисткой диска дополнительный запрос подтверждения необратимо деструктивных действий (с подсказкой) очень не помешал бы. »

Добавил предупреждение...

Цитата:

Цитата Iska
Буквально на днях была тема по решению близкой задачи — найти взаимное соответствие Диск⇔Раздел⇔Логический диск. »

А ссылку можно?

Итак, вот что получилось:

Код:

@echo off
echo ========================================
echo  CREATING WINDOWS 7 INSTALLATION USB-DRIVE 
echo  ********* by ArmDeForcer (C) 2011 *********                         
echo ========================================
echo ********************************************
echo PLEASE FOLLOW THE ONSCREEN INSTRUCTIONS!
echo ********************************************
echo 1. PLUG IN YOUR USB-DRIVE...
pause
echo ********************************************
rem создаем на нужном USB диске текстовой файл с именем myusb.txt
rem чтобы узнать на какой именно USB-драйв переносить файлы
echo 2. CREATE AN EMPTY TEXT FILE
echo ON YOUR USB-DRIVE, NAME IT myusb.txt
pause
echo ********************************************
rem находим и передаем в переменную букву диска
for %%d 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 %%d:\myusb.txt SET USBDrv=%%d:
rem проверяем на присутствие файла bootmgr на флешке
rem дабы избежать ошибки циклического копирования
if exist %USBDrv%\bootmgr del %USBDrv%\bootmgr /f  /q
echo 3. INSERT YOUR WINDOWS DISK INTO DVD-DRIVE
pause
echo ********************************************
rem проверяем на присутствие диска и находим букву DVD привода
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:\bootmgr set CDROM=%%i:

rem проверяем, существуют ли временный файл с таким именем, если да - стираем
if exist %%temp%%\script.txt del %%temp%%\script.txt /q
echo 4. PLEASE WAIT FOR THE LIST OF EXISTING DISKS:
echo list disk | diskpart
echo ********************************************
rem передаем в переменную номер диска
choice /c 0123456789 /m "5. CHOOSE YOUR USB-DRIVE NUMBER".
set /A FLASH=%ERRORLEVEL%-1

:end
echo ********************************************
echo 6. CREATING TEMP FILE...
rem создаем скрипт
echo select disk %%FLASH%%>%temp%\script.txt
echo clean>>%temp%\script.txt
echo create partition primary>>%temp%\script.txt
echo select partition 1 >>%temp%\script.txt
echo active>>%temp%\script.txt
echo format fs=NTFS quick>>%temp%\script.txt
echo assign letter=%%USBDrv%%>>%temp%\script.txt
echo exit >>%temp%\script.txt
echo ********************************************
rem подтверждение перед форматированием флешки
echo 7. WARNING! YOUR USB-DRIVE WILL BE FORMATED
echo TO NTFS FILE SYSTEM AND ALL DATA WILL BE LOST!
choice /C YN /M "ARE YOU SURE YOU WANT TO CONTINUE?:"
if errorlevel=2 Goto ex

:end

rem сам процесс
echo ********************************************
echo 8. WAIT, CREATING A BOOT DRIVE PARTITION...
diskpart /s %temp%\script.txt
echo ********************************************
echo 9. CREATING OF BOOT DRIVE IS NOW COMPLETED!
echo ********************************************
echo 10. LIST OF EXISTING DRIVES ON YOUR SYSTEM:
echo ********************************************
rem никакого функционала, просто - понты
wmic logicaldisk get caption,providername,drivetype,volumename,size
echo ********************************************
echo 11. COPYING INSTALLATION FILES TO USB-DRIVE
echo PLEASE WAIT...
rem копируем файлы по тихому
%CDROM%\Boot\bootsect.exe /nt60 %USBDrv%
xcopy %CDROM% %USBDrv% /s /e /h /k /q
echo ********************************************
echo 12. DELETING TEMP FILES
echo ********************************************
rem подтираем за собой
del %temp%\script.txt /q
echo ********************************************
echo DONE! YOUR USB-DRIVE IS READY TO USE!
echo PRESS ANY KEY TO FINISH!
echo ********************************************
pause
exit

:ex
del %temp%\script.txt /q
echo ********************************************
echo EXITING COMMAND FILE!
echo PRESS ANY KEY TO FINISH!
echo ********************************************
pause
exit


ArmDeForcer 24-01-2011 13:37 1596096

В продолжение об:

Цитата:

Цитата Iska
Сначала Вы пишете, что:
Цитата:
единственное - вначале батник просит создать текстовой файл с названием myusb.txt в корневой директории флешки, чтобы определить ее букву и не перепутать с другим диском...

а затем в скрипте «ручками» предлагаете указывать диск. Буквально на днях была тема по решению близкой задачи — найти взаимное соответствие Диск⇔Раздел⇔Логический диск. Переменные не очищаются, а команды «setlocal» нету »

Пытаюсь решить проблему с созданием вручную файла myusb.txt

Значит, имеется код, который выводит буквы и номера доступных USB дисков...
Пользователь выбирает нужный драйв... а дальше, как мне ассоциировать номер диска с его буквой и задать это в переменные?

Код:

@echo off

setlocal EnableDelayedExpansion
set Q='wmic  diskdrive where "interfacetype="USB""  assoc /assocclass:Win32_DiskDriveToDiskPartition'
echo LIST OF USB-DRIVES FOUND ON YOUR SYSTEM:
for /f "tokens=2,3,4,5 delims=,= " %%a in (%Q%) do (
  set hd=%%a %%b, %%c %%d
 
  call :_LIST_LETTER !hd!)
goto :_END

:_LIST_LETTER
(echo %1 |find  "Disk ") >nul|| goto :_EOF
for /f "tokens=3 delims==" %%a in ('WMIC Path Win32_LogicalDiskToPartition  ^|find %1') do set TMP_letter=%%a
set Part_letter=%TMP_letter:~1,2%
echo %1 %Part_letter%

goto :_EOF


:_END
choice /c 0123456789 /m "CHOOSE YOUR USB-DRIVE NUBER:"
set /a DRVnum=%ERRORLEVEL%-1
echo YOU CHOOSED USB-DRIVE NUMBER %DRVnum%

pause
:_EOF


ArmDeForcer 26-01-2011 13:05 1597572

Ясно... никто не может помочь...

Решил проблему так:

Код:

rem выбираем USB
echo 2. LISTING PHYSICAL DRIVES ON YOUR SYSTEM:
echo ____________________________________________________________________________________
wmic  diskdrive list brief
echo ____________________________________________________________________________________
echo ********************************************
choice /c 0123456789 /m "3. ENTER YOUR USB-DRIVE DeviceID NUMBER (PHYSICALDRIVE#):"
set /a DRVnum=%ERRORLEVEL%-1

rem находим букву USB
echo ********************************************
setlocal EnableDelayedExpansion
set Q='wmic  diskdrive where "Index="%DRVnum%" and Interfacetype="USB""  assoc /assocclass:Win32_DiskDriveToDiskPartition'
for /f "tokens=2,3,4,5 delims=,= " %%a in (%Q%) do (
  set hd=%%a %%b, %%c %%d
 
  call :_LIST_LETTER !hd!)
goto :_next

:_LIST_LETTER
(echo %1 |find  "Disk ") >nul || goto :eof
for /f "tokens=3 delims==" %%a in ('WMIC Path Win32_LogicalDiskToPartition  ^|find %1') do set TMP_letter=%%a
set Part_letter=%TMP_letter:~1,2%
echo 4. YOU CHOOSED DRIVE  %Part_letter% %1
goto :eof

:_next

:eof

Полный скрипт тут:
читать дальше »

Код:

@echo off
color 16
echo =============================================
echo ^| CREATING WINDOWS 7 INSTALLATION USB-DRIVE ^|
echo ^|******** by ArmDeForcer (C) 2011 ********* ^|                         
echo ^|********** win72usb.cmd ver. 4 *********** ^|
echo =============================================
echo ********************************************
echo PLEASE FOLLOW THE ONSCREEN INSTRUCTIONS!
echo ********************************************
echo 1. PLUG IN YOUR USB-DRIVE...
pause
echo ********************************************
rem выбираем USB
echo 2. LISTING PHYSICAL DRIVES ON YOUR SYSTEM:
echo ____________________________________________________________________________________
wmic  diskdrive list brief
echo ____________________________________________________________________________________
echo ********************************************
choice /c 0123456789 /m "3. ENTER YOUR USB-DRIVE DeviceID NUMBER (PHYSICALDRIVE#):"
set /a DRVnum=%ERRORLEVEL%-1

rem находим букву USB
echo ********************************************
setlocal EnableDelayedExpansion
set Q='wmic  diskdrive where "Index="%DRVnum%" and Interfacetype="USB""  assoc /assocclass:Win32_DiskDriveToDiskPartition'
for /f "tokens=2,3,4,5 delims=,= " %%a in (%Q%) do (
  set hd=%%a %%b, %%c %%d
 
  call :_LIST_LETTER !hd!)
goto :_next

:_LIST_LETTER
(echo %1 |find  "Disk ") >nul || goto :eof
for /f "tokens=3 delims==" %%a in ('WMIC Path Win32_LogicalDiskToPartition  ^|find %1') do set TMP_letter=%%a
set Part_letter=%TMP_letter:~1,2%
echo 4. YOU CHOOSED DRIVE  %Part_letter% %1
goto :eof

:_next

echo ********************************************
rem проверяем на присутствие файла bootmgr на флешке
rem дабы избежать ошибки циклического копирования
if exist %Part_letter%\bootmgr del %Part_letter%\bootmgr /f  /q
echo 5. INSERT YOUR WINDOWS DISK INTO DVD-DRIVE
pause
echo ********************************************
rem проверяем на присутствие диска и находим букву DVD привода
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:\bootmgr set CDROM=%%i:

rem проверяем, существуют ли временный файл с таким именем, если да - стираем
if exist %%temp%%\script.txt del %%temp%%\script.txt /q

echo 6. CREATING TEMP FILE...
rem создаем скрипт
echo select disk %%DRVnum%%>%temp%\script.txt
echo clean>>%temp%\script.txt
echo create partition primary>>%temp%\script.txt
echo select partition 1 >>%temp%\script.txt
echo active>>%temp%\script.txt
echo format fs=NTFS quick>>%temp%\script.txt
echo assign letter=%%Part_letter%%>>%temp%\script.txt
echo exit >>%temp%\script.txt
echo ********************************************
rem подтверждение перед форматированием флешки
echo 7. WARNING! YOUR USB-DRIVE WILL BE FORMATED
echo TO NTFS FILE SYSTEM AND ALL DATA WILL BE LOST!
choice /C YN /M "ARE YOU SURE YOU WANT TO CONTINUE?:"
if errorlevel=2 Goto ex

:end

rem сам процесс
echo ********************************************
echo 8. WAIT, CREATING A BOOT DRIVE PARTITION...
diskpart /s %temp%\script.txt
echo ********************************************
echo 9. CREATING A PARTITION COMPLETED!
echo ********************************************
echo 10. CREATING BOOT RECORD...
%CDROM%\Boot\bootsect.exe /nt60 %Part_letter%
echo ********************************************
echo 11. COPYING INSTALLATION FILES TO USB-DRIVE
echo PLEASE WAIT...
rem копируем файлы по тихому
xcopy %CDROM% %Part_letter% /s /e /h /k /q
echo ********************************************
echo 12. DELETING TEMP FILES
echo ********************************************
rem подтираем за собой
del %temp%\script.txt /q
echo ********************************************
echo DONE! YOUR USB-DRIVE IS READY TO USE!
echo PRESS ANY KEY TO FINISH!
echo ********************************************
pause
exit

:ex
del %temp%\script.txt /q
echo ********************************************
echo ERROR! EXITING COMMAND FILE!
echo PRESS ANY KEY TO FINISH!
echo ********************************************
pause
exit

:eof


shao 29-01-2011 03:38 1599603

Извините, а можно объяснить поподробнее, что это за переменные и в каких случаях используются :
%USBDrv% и %DRVnum% ?
Спасибо !

ArmDeForcer 29-01-2011 09:37 1599661

Цитата:

Цитата shao
Извините, а можно объяснить поподробнее, что это за переменные и в каких случаях используются :
%USBDrv% и %DRVnum% ?
Спасибо ! »

Это обычные строковые переменные, которые я задал и так назвал, это не системные переменные...

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

Командный файл выдает список физических дисков в системе и просит выбрать номер вашего USB устройства (возможно в системе несколько таких), когда пользователь вводит номер - он присваивается переменной DRVnum, которая и используется в последующих командах...
Затем по номеру выбираем нужный диск, проверяем, действительно ли у него интерфейс USB и находим букву, которую задаем в переменную Part_letter. Теперь, зная номер диска и букву тома, можно спокойно выполнять операции с флешкой...

USBDrv - такая же переменная, использовалась в промежуточном коде, в процессе решения некоторых нюансов, в конечном коде - ее нет...

shao 29-01-2011 10:13 1599673

Спасибо за ответ!

Цитата:

Цитата ArmDeForcer
просит выбрать номер вашего USB устройства (возможно в системе несколько таких), когда пользователь вводит номер........ »

А как это сделать автоматически, без участия ползователя, при условии , что USB устройство - это USB-flash и одно ?

И ещё (не совсем в тему, но приблизительно) - как быть в таком случае:
Вот , здесь например, всё понятно:
Код:

FOR %%d 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 %%d:\WIN51 SET CDROM=%%d:
А если у нас не CDROM, а USB-flash ?

ArmDeForcer 29-01-2011 14:16 1599813

Ну, например так, с условием, что в системе 1 USB диск:

Код:

setlocal EnableDelayedExpansion
set Q='wmic  diskdrive where "Interfacetype="USB""  assoc /assocclass:Win32_DiskDriveToDiskPartition'
for /f "tokens=2,3,4,5 delims=,= " %%a in (%Q%) do (
  set hd=%%a %%b, %%c %%d
 
  call :_LIST_LETTER !hd!)
goto :_next

:_LIST_LETTER
(echo %1 |find  "Disk ") >nul || goto :eof
for /f "tokens=3 delims==" %%a in ('WMIC Path Win32_LogicalDiskToPartition  ^|find %1') do set TMP_letter=%%a
set MYUSB=%TMP_letter:~1,2%
echo YOUR USB DRIVE - %MYUSB% %1
goto :eof

:_next

:eof

переменная MYUSB - и будет буква USB-драйва

Цитата:

Цитата shao
И ещё (не совсем в тему, но приблизительно) - как быть в таком случае:
Вот , здесь например, всё понятно:
Код:
FOR %%d 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 %%d:\WIN51 SET CDROM=%%d:
А если у нас не CDROM, а USB-flash ? »

Это совсем неважно, какой интерфейс у искомого тома. Надо понять, что происходит в этой строке. Переменной CDROM (можешь переименовать ее во что угодно) присваивается буква диска, у которого в корневой директории лежит файл с названием WIN51. То есть, если такой файл находится только на флешке - тогда все пройдет нормально, если же он находится и на флешке и в корневой директории другого диска (в том числе и CD), или его вообще нет ни на одном диске - то это не сработает.

Вопрос, что конкретно надо сделать? Если нужно, чтоб определялся конкретный USB, подключенный к системе, самый простой способ, создать в корневой директории этой флешки текстовой файл с уникальным названием (допустим - myusb.txt), и тогда он найдется очень легко:

Код:

FOR %%d 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 %%d:\myusb.txt SET USBdrv=%%d:
переменной USBdrv будет присвоена буква USB флешки

shao 30-01-2011 15:18 1600451

ArmDeForcer, большое спасибо за подробное объяснение !
Буду пробовать.

Iska 10-02-2011 05:34 1609006

Цитата:

Цитата ArmDeForcer
А временные файлы таки удаляются, в конце кода... »

Дважды глядел и всё одно проглядел. ArmDeForcer, приношу Вам свои извинения на этот счёт.


Время: 20:44.

Время: 20:44.
© OSzone.net 2001-