2011-11-17 247 views
1

在批處理文件中,我試圖獲取命令的輸出並將其保存到變量中。將命令輸出保存到變量

我的命令的目標是計算某個文件夾中的文件夾數量。

  • 我不能使用this接受的答案提供的伎倆,因爲我會做cd path\to\my\folder才能到當前目錄。不幸的是,我不能執行這個命令,因爲path\to\my\folder實際上是一個UNC路徑(\\path\to\my\folder),並且windows cmd不支持cd \\some\UNC\path
  • 我知道this答案,但我不想使用臨時文件。

於是,我就做到以下幾點:

  • 要獲得文件夾的數量,我用:

    dir \\path\to\my\folder | find /c "<REP>" 
    

    能正常工作並返回我一個號碼,我會期待。

  • 要獲取此命令的批處理變量輸出,我想:

    FOR /F "TOKENS=*" %%i IN ('\\path\to\my\folder | find /c "<REP>"') DO 
    SET value = %%i 
    

    但沒有成功,該錯誤信息是...

    |出乎意料。

    ...當我執行批處理文件,並...

    %%我是出乎意料的。

    當我嘗試直接在命令窗口中執行命令。我試圖擺脫<REP>字符串(...find /c ""<REP>""') DO...)附近的引號,給我同樣的錯誤。

我在正確的路徑檢索變量的輸出嗎?我該怎麼做才能解決錯誤信息?
或者也許有一種更簡單的方法來設置變量中的命令輸出?

+2

解決您所遇到的問題:| 1)''應該像這樣這方面轉義:'^ |',和2)'%% i'是僅在批處理文件中使用,'%i'是其在命令提示符下直接使用的對象。 –

+1

[Capture輸出命令CMD]的可能重複(http://stackoverflow.com/questions/14646575/capture-output-command-cmd) – aschipfl

回答

4

您可以使用您首先提到的答案。您不必在cd那裏,但是您可以使用pushd,它將爲UNC路徑分配一個臨時驅動器盤符,當您執行popd時將會釋放該驅動器盤符。

因此,在本質:

pushd \\server\path 
set count=0 
for /d %%x in (*) do set /a count+=1 
popd 
相關問題