我需要在批處理檔案中將存檔檔案復制到特定的驅動器名稱......而不是字母。我需要支持在安裝、移除和移動時分配了不同驅動器號的驅動器。我希望能夠通過驅動器的唯一名稱找到驅動器,這樣我就可以為該驅動器參考適當的驅動器號。
這是我在論壇上找到的最接近的代碼:
for /f "usebackq tokens=2 delims=:=" %%a in (`wmic logicaldisk where VolumeName^="BACKUP2" get caption /value`) do set drive=%%a:
if "%drive%"=="" (
echo not inserted
) else (cls
echo inserted as %drive%
)
它產生“插入為“BACKUPS2”獲取標題/值:”作為輸出。我期待只回傳驅動器號。
在進行盡職調查時,我查看了 /? 用于將 LOGICALDISK 列為別名的 wmic。wmic 幫助指示我“切換別名/?” 尋求別名的幫助,但都是“LOGICALDISK /?” 和“開關-LOGICALDISK /?” 報告說,兩者都不是內部或外部命令...... yada,yada。
我注意到 wmic /? 說 wmic 已被棄用。不知道這是否會影響可用的檔案。我還注意到上面列出的用于查找驅動器名稱的代碼......不是字母......已經很舊了。
我被困住了。如果有人能把我的頭拉出來,或提出替代解決方案,我將不勝感激。
uj5u.com熱心網友回復:
如果您不確定是否使用已棄用的 WMIC.exe 實用程式,您可以使用其他一些實用程式,而且這些實用程式也可能會更快一些。
您可以使用vol以下方法嘗試這個想法:
@SetLocal EnableExtensions EnableDelayedExpansion
@For /L %%G In (68, 1, 90) Do @(%SystemRoot%\System32\cmd.exe /D /C Exit /B %%G
Vol !=ExitCodeAscii!: 2>NUL | %SystemRoot%\System32\findstr.exe /RIC:" BACKUP2$" 1>NUL && Copy /Y "C:\MyDir\*" !=ExitCodeAscii!:\)
或者,您可以使用fsutil.exe, (在某些作業系統上,可能需要“以管理員身份運行”):
@For /F "Tokens=1,* Delims=:" %%G In ('%SystemRoot%\System32\fsutil.exe FSInfo Drives 2^>NUL') Do @For %%I In (%%H) Do @%SystemRoot%\System32\fsutil.exe FSInfo VolumeInfo %%~dI | %SystemRoot%\System32\findstr.exe /RIC:" : BACKUP2$" 1>NUL && Copy /Y "C:\MyDir\*" "%%I"
顯然,您將更"C:\MyDir\*"改為實際的源檔案 glob 并在目標根目錄中添加更多分支;(!=ExitCodeAscii!:\在第一個示例中,%%I在第二個示例中)根據需要。
[編輯 /]
如果,正如您暗示的那樣,您需要對備份驅動器進行管理員訪問,您可以使用 DiskPart 直接在管理員命令提示符視窗中更簡單地執行此操作。
for /f "tokens=3" %g in ('echo list volume ^| diskpart.exe ^| find.exe /i " backup2 "') do @copy /y "c:\mydir\*" "%g:\"
如果您仍然想從批處理檔案中以管理員身份執行此操作,請將其更改為:
@for /f "tokens=3" %%g In ('echo list volume ^| diskpart.exe ^| find.exe /i " backup2 "') do @copy /y "c:\mydir\*" "%%g:\"
uj5u.com熱心網友回復:
幸運的是我在電視上扮演腦科學家。
FOR /F "skip=2 tokens=2 delims=," %%G IN ('wmic logicaldisk where volumename^="BACKUP2" get caption /format:csv') DO SET "drive=%%G"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/392190.html
標籤:批处理文件
