Пакетный сценарий Windows Получить текущее имя диска - PullRequest
22 голосов
/ 28 апреля 2011

У меня есть командный файл, который находится на USB-ключ. Мне нужно знать имя диска, в котором находится партия.

Например, если это E: \ mybatch.bat, он должен найти E: \ то же самое для F: \, G: \ etc .., когда он открыт.

Как я мог сделать это в пакетном скрипте. (Windows)

Ответы [ 6 ]

36 голосов
/ 28 апреля 2011

%CD% - это то, что вы ищете.Он печатает текущий рабочий каталог командного файла или команды, выполняющей его.Если ваш пакетный файл находится в корне диска, он просто напечатает букву диска, в противном случае вам придется проанализировать первые 2 символа.

Пример:

echo %CD%

печать

E:\

на флэш-накопителе, установленном на E:.

Обновление: Как сказал Андрей в комментариях, если вы просто ищете первые три символа пути, используйте этувместо% CD%:

%CD:~0,3%

Это приведет к E:\, например, в любом месте накопителя.

17 голосов
/ 24 января 2013

M $ документация " Использование параметров пакета " гласит:

Модификатор:% ~ d0

Описание: Расширяет% 0 до буквы диска.

9 голосов
/ 28 апреля 2011

Если запустить из .CMD / .BAT файла, вы можете использовать %~dp0, чтобы получить текущий / рабочий каталог.Это немного безопаснее, так как известно о путях UNC и подобных.Ссылка на синтаксис этой переменной доступна здесь .

1 голос
/ 23 ноября 2013

Вы можете найти все буквы 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.
        )
        )
0 голосов
/ 20 сентября 2018
%CD:~0,2%

Это даст вам текущий диск в формате C:, то есть первые 2 символа из текущего рабочего каталога

C:\Users\ashish>ECHO %CD:~0,2%
C:

D:\projects>ECHO %CD:~0,2%
D:

D:\projects>ECHO %CD%
D:\projects
0 голосов
/ 16 января 2015

Большое спасибо @ Sparky3489, если у меня есть только один флэш-накопитель USB, я помещаю это в ваш алгоритм, сразу после

echo %%i is a USB drive.
Set FlashDrive=%%I

Я также изменил формулировку идентификатора на

Echo %%i is a USB Flash Drive~!

Затем, после, {и вне} алгоритма, я могу добавить путь к флеш-накопителю, например ...

Set FlashPath=%FlashDrive%\Users\Public\Documents

Затем, установив другие пути, такие как

Set SourcePath=C:\Users\Public\Documents

Я могу создать резервную копию пакетного файла для флэш-накопителя (можно вызвать с помощью ярлыка Windows с соответствующим значком в окне быстрого запуска ~ Поиск «Быстрый запуск», если сомневаюсь в том, что говорюО).

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 * * * * * * * * * *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...