題 將目錄名稱分配給cmd批處理中的變量


我想檢索文件名並將其分配給變量,以便我可以在腳本中進一步使用它。

set directoryName = dir Docum?nt*
echo %directoryName%

但是一旦我執行批處理文件,我得到的就是這個。

D:\ >a.bat
D:\ >set directoryName = dir Docum?nt*
D:\ >echo
ECHO is on.

如何確保為我的變量分配了值,即目錄名,以便我可以開始編寫更多腳本。

我的 a.bat 包含:

set directoryName=dir Docum?nt*
echo %directoryName%

刪除空格後:

D:\Workspace>set directoryName=dir Docum?nt*

D:\Workspace>echo dir Docum?nt*
dir Docum?nt*

我想,已經為vairbale分配了整個值以及command關鍵字而不是結果。我希望輸出是目錄名,即 Documentation


5
2018-03-09 14:20


起源


容易...使用 set directoryName=dir Docum?nt* 就像那樣。你有空白區域所以只需刪除它...讓我知道這是否有幫助,我會添加一個答案。 - Pimp Juice IT


答案:


在變量設置的等號前後有空格,只需刪除它並使用下面的方法。

@ECHO ON

set directoryName=dir Docum?nt*
echo %directoryName%

錯誤

  • set directoryName = dir Docum?nt*

正確

  • set directoryName=dir Docum?nt* enter image description here

隱含的FOR循環

FOR /F "TOKENS=*" %%F IN ('DIR /B /AD "Docum?nt*"') DO SET directoryName=%%~F

遞歸FOR循環

FOR /F "TOKENS=*" %%F IN ('DIR /B /AD /S "Docum?nt*"') DO SET directoryName=%%~F

更多資源


3
2018-03-09 14:29



謝謝,我仍然有輸出問題,請檢查我更新的問題。 - Maven
@Maven我剛剛更新了我的答案,因為你更新了問題的方法是將它放在你的DIR命令和通配符的循環中以獲得預期的結果。您可能需要添加IF邏輯以將其過濾到明確的文件夾名稱,否則它將獲得所有匹配。 - Pimp Juice IT


如果你想要的是設置匹配的目錄名稱 Docum?nt*,那麼你需要的是:

for /d %%d in (Docum?nt*) do set directoryName="%%d"

如果多個目錄與掩碼匹配,那麼您將只獲得其中一個匹配。如果您需要變量來保存匹配目錄的列表,那麼您將需要使用 for /f


4
2018-03-09 14:41





空間不足。

如果必須在名稱中使用空格,請將它們置於以下格式:

set directoryName = "dir Docum?nt*"

它也是 “” 要么 空間不足


3
2018-03-09 14:26



謝謝,我仍然有輸出問題,請檢查我更新的問題。 - Maven
@Maven:Overmind意味著提供的變量名稱中的空格。您更新的代碼與此答案中建議的代碼不符。 - Lightness Races in Orbit


我希望輸出是目錄名,即 Documentation

你不會得到的 Documentation 作為輸出,除非你  您存儲在變量中的命令。

使用以下批處理文件(test.cmd):

@echo off
setlocal
set directoryName=dir Docum?nt*
rem run command
cmd /c %directoryName%
pause 
endlocal

輸出示例:

> test
dir Docum?nt*
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

09/03/2017  17:10    <DIR>          Documentation
               0 File(s)              0 bytes
               1 Dir(s)  1,701,065,842,688 bytes free

進一步閱讀

  • Windows CMD命令行的A-Z索引  - 一個很好的參考
  • CMD  - 啟動新的CMD shell並(可選)運行命令/可執行程序。
  • DIR  - 顯示文件和子文件夾列表。
  •   - 顯示,設置或刪除CMD環境變量。使用SET進行的更改將僅在當前CMD會話期間保留。

2
2018-03-09 17:13