2011-04-27 103 views
17

我有一個批處理文件,它位於USB密鑰上。我需要知道該批次的驅動器名稱。Windows批處理腳本獲取當前驅動器名稱

例如,如果它是E:\ mybatch.bat,它應該找到E:\ F:\,G:\等同樣的東西。

我怎麼能在批處理腳本中做到這一點。 (Windows)

+0

是否要批次所在的驅動器或當前工作目錄的驅動器?這兩個是不同的。 – Joey 2011-04-28 08:52:50

回答

27

%CD%是你在找什麼。它打印批處理文件或運行它的命令的當前工作目錄。如果您的批處理文件位於驅動器的根目錄下,它將只顯示驅動器盤符,否則您將不得不解析前2個字符。

實施例:

echo %CD% 

打印

E:\ 

安裝到E中的閃存驅動器上:.

更新:由於舍甫琴科在評論中說,如果你只是尋找路徑的前三個字母,然後用它來代替%CD%:

%CD:~0,3% 

這將導致E:\,爲例如,在驅動器上的任何地方。

+0

我試圖配置geany編輯器來編譯我的java文件,即使即時在usb上。我使用%CD%JDK \ bin \ javac「%f」但它沒有工作。無論如何,你的答案是完美的,我會盡快接受你的答案。 ty – SBSTP 2011-04-27 23:46:42

+0

嘗試%CD%\而不是%CD%。否則ITLL尋找E:JDK \ BIN \ javac的,而不是E:\ JDK \ BIN \ javac的 – 2011-04-27 23:48:50

+0

我做了一個簡單的腳本, 'code' 關閉@echo 呼應%CD% 暫停 'code' 印刷Ç :\不是C: – SBSTP 2011-04-28 00:14:03

9

如果從一個.cmd/.bat文件內運行,則可以使用%~dp0來獲得當前/工作目錄。因爲它知道UNC路徑等,所以這個更安全一些。該變量的語法參考可用here

+0

不是true @ewall:參數0始終保留批處理文件位置的目錄 - 如果有人從另一個驅動器調用該批處理文件,該目錄可能不是當前工作目錄。即使使用完全限定的路徑名​​調用批處理文件也不會將當前工作目錄更改爲該路徑。這就是爲什麼%cd%很有用 - 它顯示了當前的工作目錄,而不是批處理文件的位置。 – 2018-01-11 17:08:07

1

你可以找到任何與此驅動器的所有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

非常感謝@ Sparky3489,如果我只有一個USB閃存驅動器,我把這個你的算法中,權

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

我也改了標識的措辭

Echo %%i is a USB Flash Drive~! 

然後,之後,{和}以外的算法,我可以添加閃存驅動器路徑,如...

在快速啓動窗口

然後通過設立其他路徑 如

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 * * * * * * * * * *