2011-01-05 70 views
1

我正在Windows XP中編寫批處理文件。我已將一組*.ts文件複製到我的exe目錄中。 TS文件的數量不是固定的,因此它們的名稱不同。作爲參數傳遞給Windows批處理文件時,*。*的擴展

現在我想運行我的一個exe文件,它將所有TS名稱作爲參數。

在Linux中我試圖像 <MyExeName> *.ts

這個工作。但是當我在Windows中做同樣的事情時,它並沒有擴大*.ts

請讓我知道如何擴展*.ts,同時將參數傳遞給我的exe文件。

回答

1

你可以使用一個for循環來enumarate所有* .ts文件,像

for %%f in (*.ts) do echo %%f 
0

從附近的SET /?輸出的到底是這種寶石關於延遲的環境變量提取。它演示瞭如何使用一個相對較新的符號(自NT 3.1以來它可以在XP和Win 7上運行)來延遲擴展環境變量,以便在單個變量中構建匹配通配符的文件名列表。

延遲環境變量擴充允許您使用一個不同的 字符(驚歎號)在 執行時間擴充環境變量。如果延遲變量擴充被啓用,上述 例子可以寫成如下按預期工作:

set LIST= 
for %i in (*) do set LIST=!LIST! %i 
echo %LIST% 

注意,有一個問題,這裏包含空格或其他「有趣」的人物名字的報價是我已經作爲學生的練習了。在CMD.EXE中正確引用比在任何Unix shell中正確引用更困難。

當然,請用您的命令行替換echo命令。

編輯:據觀察,這在批處理文件中似乎不起作用,它取決於啓用延遲擴展的特定功能。

使用延遲擴展功能時,/V:ON切換到CMD.EXE,或全局調用CMD的所有調用的註冊表項。詳情記錄在CMD /?的輸出中。

移至批處理文件時,您遇到了一些問題,並且很容易修復以啓用該功能。關鍵是SETLOCAL命令可以隨意打開和關閉延遲功能。從CMD /?

在批處理文件中SETLOCAL ENABLEDELAYEDEXPANSIONDISABLEDELAYEDEXPANSION 爭論接管/V:ON/V:OFF開關優先。有關詳細信息,請參閱SETLOCAL /?

另外,在某些情況下,例如FOR命令有一個神祕的需要使百分號加倍。總之,我已經重寫我的例子是這樣的:

SETLOCAL ENABLEDELAYEDEXPANSION 
set LIST= 
for %%f in (*.ts) do set LIST=!LIST! "%%f" 
echo %LIST:~1% 

上面還援引每個文件名來處理有空格的名字,並修剪多餘的空間的字符串的前面所剩下的由%LIST:~1%第一次循環迭代。

+0

嗨,謝謝你的回覆。我試過了延遲的環境變量擴展方法。它在命令行中適用於我。所以我嘗試把它放到一個批處理文件中。但是那個時候,一旦啓用了環境變量擴展(使用cmd/V = ON),echo命令和上面的方法不起作用。可能是它正在創建一個新的命令行,我無法執行此操作。所以我們如何才能使它成爲批處理文件。 – Aneesh 2011-01-07 10:51:31

+0

@Aneesh,我想我找到了一個可以在批處理文件中工作的配方。有關詳細信息,請參閱我對編輯的回答。我已經在Win 7下測試了它。 – RBerteig 2011-01-07 20:04:47

+0

嗨,RBerteig,非常感謝。這對我很好。 :) .. – Aneesh 2011-01-10 12:19:47

相關問題