2010-08-04 76 views
6

linux & unix shell可以像這樣處理子命令。windows子命令評估

$> command `subcommand` 

確實窗口CMD外殼類似的功能?

回答

6

可以使用for命令的變化得到類似的東西:

FOR /F "usebackq tokens=*" %%a IN (`subcommand`) DO @command %%a 

一個大區別(除了是直觀和更噁心)的是,它會通過subcommand

生產的每一行執行一次 command

請注意,在腳本文件中,百分號必須加倍(如果您有某些原因希望在命令行執行此操作,請使用不加倍的百分號)。

+3

usebackq並非真的必要(您可以使用單引號代替):'for/f「tokens = *」%f in('subcommand')do @(command「%f 「)(我喜歡在'batch'中使用帶有條件語句的圓括號,這樣您可以輕鬆地將多個語句添加到」body「) – bambams 2011-10-21 17:51:37

1

整體而言,沒有。 Windows命令提示符實際上並沒有太多的功能,因爲它不提供很多自己的功能,獨立於您可以運行的命令。例如,在大多數Un * x shell中,文件通配符(匹配foo.*到文件列表)由shell本身處理。在Windows中,每個應用程序都可以從命令行看到foo.*,並且必須自行實現文件通配。

如果你正在向下移動的嘗試到Windows自動執行,或想有一個更全功能的殼的道路,就應該考慮使用PowerShell,這確實讓你做子命令:

命令(子命令)

+0

雖然PowerShell還有很多其他缺少的功能,但某些cmd.exe不支持。例如,&&,||,<,明智的stderr支持等等......我試過切換,但最終放棄了它。 Windows中的「本地」shell無法滿足您的需求。安裝類似UNIX的shell(Cygwin或MSYS),或者更好的是運行一個GNU/Linux VM。^_^ – bambams 2011-10-21 17:55:00

+0

關於PowerShell(對我來說)最棘手的事情之一是新的語法......它與DOS shell,bash/tcsh或perl完全不同。特別是,PowerShell具有「 - 和」和「 - 或」而不是「&&」或「||」,並且實際上處理重定向非常好。有關所有詳細信息,請參閱「help about_logical_operator」或「about_redirection」。 – JaredReisinger 2011-10-25 21:26:08

+0

感謝您的評論。我得看看「 - 和」和「 - 或」。當我上次使用它時,我盡力搜索,所有消息來源似乎都表示它尚未得到支持(但名單上)。也許他們實施了那些「近期」?在任何情況下,它都會使用看起來像命令選項而不是特殊字符的方式延遲...至於重定向,恕我直言,我認爲使用對象代替文本是不必要的複雜。它可能會使某些過程接口更高效,但需要維護額外的接口。複雜性是不必要的。 – bambams 2011-10-26 17:58:04