У меня есть командный файл с ключом usb. Мне нужно знать имя диска, в котором находится пакет.
Например, если E:\mybatch.bat, он должен найти E:\то же самое для F: \, G:\etc.., когда он откроется.
Как я могу сделать это в пакете script. (Windows)
У меня есть командный файл с ключом usb. Мне нужно знать имя диска, в котором находится пакет.
Например, если E:\mybatch.bat, он должен найти E:\то же самое для F: \, G:\etc.., когда он откроется.
Как я могу сделать это в пакете script. (Windows)
%CD%
- это то, что вы ищете. Он печатает текущий рабочий каталог командного файла или команды, запускающей его. Если ваш командный файл находится в корневом каталоге диска, он просто распечатает букву диска, иначе вам придется проанализировать первые 2 символа.
Пример:
echo %CD%
печатает
E:\
на флеш-накопителе, установленном на E:.
Обновление: как сказал Андрей в комментариях, если вы просто ищете первые три символа пути, используйте вместо него% CD%:
%CD:~0,3%
Это приведет к E:\
, например, в любом месте на диске.
Документация по M $Использование параметров партии" говорит:
Модификатор:% ~ d0
Описание: Увеличивает% 0 на букву диска.
Если вы запускаете изнутри .CMD/.BAT файл, вы можете использовать %~dp0
для получения текущего/рабочего каталога. Это немного безопаснее, поскольку он знает о путях UNC и тому подобных. Ссылка для синтаксиса этой переменной доступна здесь.
Вы можете найти все буквы USB-накопителей с любого диска с этим.
@echo off
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
echo %%i is a USB drive.
)
)
Спасибо очень много @Sparky3489, если у меня есть только один USB-накопитель, я помещаю это в ваш алгоритм, сразу после
echo %%i is a USB drive.
Set FlashDrive=%%I
Я также изменил формулировку идентификатора на
Echo %%i is a USB Flash Drive~!
Затем, After, {и Outside} Алгоритм, я могу добавить путь к Flash-приводу, например...
Set FlashPath=%FlashDrive%\Users\Public\Documents
Затем, установив другие пути Например,
Set SourcePath=C:\Users\Public\Documents
Я могу сделать пакетный файл BackUp для флеш-накопителя (может быть вызван через Windows Short-Cut с ассоциированным значком в вашем окне быстрого запуска ~ Поиск "Быстрый запуск", если в сомнении, о чем я говорю).
Rem * * * * * * * * * Start Batch File * * * * * * * * * *
@Echo OFF
cls
Echo FlashDrive UpDater for
Echo.
Echo Excel, Word ...
Echo * * * * * * * * * ~ Excel SpreadSheets ~ * * * * * * * * *
XCopy /D /I /V /Y /U /S "%SourcePath%\Excel Documents\*.*" "%FlashPath%\Excel Documents\"
Echo * * * * * * * * * ~ Word Documents ~ * * * * * * * * *
XCopy /D /I /V /Y /U /S "%SourcePath%\Word Documents\*.*" "%FlashPath%\Word Documents\"
Echo.
Echo.
Echo FlashDrive = %FlashDrive%
Echo FlashPath = %FlashPath%
Echo.
Echo * Bonus Switch Info * * * * *
Echo * XCopy Switch /D ~ Copies Files Changed On or After the Specified Date.
Echo * {If no Date is Given, Copies only those Files whose
Echo * Source Time is Newer than the Destination Time}.
Echo * XCopy Switch /I ~ Copies More than One File to Destination (Assumes Destination is a Directory)
Echo * XCopy Switch /S ~ Copies Directories and Subdirectories Except Empty Ones
Echo * XCopy Switch /V ~ Verifies Each New File.
Echo * XCopy Switch /U ~ Copies only Files that Already Exist in Destination.
Echo * XCopy Switch /Y ~ Suppresses Prompting to Confirm You Want to Overwrite an Existing Destination File.
Echo.
Rem for More Info on XCopy Switches GoTo http://support.microsoft.com/kb/128756
Echo Directory Path = %~DP0
Echo.
Echo * Batch File Name = %0 *
Echo.
Rem Echo %CD:~0,2%, {Returns "Drive Letter & Colon"}
Rem Echo %CD:~0,3%, {Returns "Drive Letter & Colon & BackSlash"}
Pause
cls
Pause
Exit
Rem * * * * * * * * * End Batch File * * * * * * * * * *