2010-01-08 431 views
67

我有一個目錄,我想用;列出所有.doc文件。如何連接Windows批處理文件中的字符串?

我知道下面的批處理命令回聲的所有文件:

for /r %%i In (*.doc) DO echo %%i 

但現在我希望把他們都在一個變量,在兩者之間添加一個;和回聲一次全部。
我該怎麼做?

set myvar="the list: " 
for /r %%i In (*.doc) DO <what?> 
echo %myvar% 

回答

58

什麼:

@echo off 
set myvar="the list: " 
for /r %%i in (*.doc) DO call :concat %%i 
echo %myvar% 
goto :eof 

:concat 
set myvar=%myvar% %1; 
goto :eof 
+2

非常感謝這個答案!它只是解決了一個動態創建類路徑到批處理文件的問題:)添加了必要的修改,但是我的問題是在執行concat並且已經修復了它! – Charliemops 2011-08-30 14:17:13

43

基於魯本斯的解決方案,您需要啓用ENV變量(鍵入 「help SETLOCAL」 或 「幫助CMD」)的延遲擴展,使得變種是正確的

@echo off 
setlocal enabledelayedexpansion 
set myvar=the list: 
for /r %%i In (*.sql) DO set myvar=!myvar! %%i, 
echo %myvar% 

另外考慮以下限制(MSDN):

在循環評價10

最大個人環境 可變大小是8192字節。

+1

限制是錯誤的。 Windows中的最大環境變量大小約爲64 KiB,因此大約有32k個字符。但是,在批處理文件中,存在最大命令行長度爲8190個字符的問題,因此您設置的每個環境變量必須更短。另外,65 KiB的總環境限制是假的。我只是創建了幾個MiB的環境變量,沒有任何問題。 – Joey 2010-01-09 10:32:25

+2

鏈接表示65千兆字節,等於64MB。我不會爭辯,因爲我從來沒有處理過它。 – devio 2010-01-09 14:49:24

+1

謝謝你這麼多人!你做了我的一天:-) – Julien 2012-04-29 19:17:08

0

請注意,變量@fname@ext可以簡單連接。這:

forfiles /S /M *.pdf /C "CMD /C REN @path @[email protected]" 

重命名所有的PDF文件 「filename_old.pdf」

相關問題