我正在Windows XP中編寫批處理文件。我已將一組*.ts
文件複製到我的exe目錄中。 TS文件的數量不是固定的,因此它們的名稱不同。作爲參數傳遞給Windows批處理文件時,*。*的擴展
現在我想運行我的一個exe文件,它將所有TS名稱作爲參數。
在Linux中我試圖像 <MyExeName> *.ts
這個工作。但是當我在Windows中做同樣的事情時,它並沒有擴大*.ts
。
請讓我知道如何擴展*.ts
,同時將參數傳遞給我的exe文件。
我正在Windows XP中編寫批處理文件。我已將一組*.ts
文件複製到我的exe目錄中。 TS文件的數量不是固定的,因此它們的名稱不同。作爲參數傳遞給Windows批處理文件時,*。*的擴展
現在我想運行我的一個exe文件,它將所有TS名稱作爲參數。
在Linux中我試圖像 <MyExeName> *.ts
這個工作。但是當我在Windows中做同樣的事情時,它並沒有擴大*.ts
。
請讓我知道如何擴展*.ts
,同時將參數傳遞給我的exe文件。
當調用外部命令時,Windows shell(命令處理器)從不做任何通配符;你必須自己做。對於C,請參閱Globbing in C++/C, on Windows。
你可以使用一個for循環來enumarate所有* .ts文件,像
for %%f in (*.ts) do echo %%f
從附近的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 ENABLEDELAYEDEXPANSION
或DISABLEDELAYEDEXPANSION
爭論接管/V:ON
或/V:OFF
開關優先。有關詳細信息,請參閱SETLOCAL /?
。
另外,在某些情況下,例如FOR
命令有一個神祕的需要使百分號加倍。總之,我已經重寫我的例子是這樣的:
SETLOCAL ENABLEDELAYEDEXPANSION
set LIST=
for %%f in (*.ts) do set LIST=!LIST! "%%f"
echo %LIST:~1%
上面還援引每個文件名來處理有空格的名字,並修剪多餘的空間的字符串的前面所剩下的由%LIST:~1%
第一次循環迭代。
嗨,謝謝你的回覆。我試過了延遲的環境變量擴展方法。它在命令行中適用於我。所以我嘗試把它放到一個批處理文件中。但是那個時候,一旦啓用了環境變量擴展(使用cmd/V = ON),echo命令和上面的方法不起作用。可能是它正在創建一個新的命令行,我無法執行此操作。所以我們如何才能使它成爲批處理文件。 – Aneesh 2011-01-07 10:51:31
@Aneesh,我想我找到了一個可以在批處理文件中工作的配方。有關詳細信息,請參閱我對編輯的回答。我已經在Win 7下測試了它。 – RBerteig 2011-01-07 20:04:47
嗨,RBerteig,非常感謝。這對我很好。 :) .. – Aneesh 2011-01-10 12:19:47