覆盖Windows cmd内部命令

时间:2012-11-10 11:11:49

标签: windows command-line path

我正在使用一个程序,该程序使用type命令将文件内容传送到另一个程序,如下所示:

type test.txt | (another program)

此命令在我的主程序中是硬编码的。问题是type命令在正斜杠方面存在问题:

E:\babak\git\bin>type e:/babak/git/bin/test.txt
The syntax of the command is incorrect.

是否可以使用名为type的自定义应用程序覆盖cmd内部type,该应用程序支持正斜杠,因此如果有人在cmd中调用type,则自定义{{1应用程序被调用?

3 个答案:

答案 0 :(得分:3)

如果将参数括在引号中,则TYPE内部命令可以正常使用引号。

type "e:/babak/git/bin/test.txt"

如果引用命令,则可以阻止使用内部命令并强制使用批处理或exe:

"type" e:/babak/git/bin/test.txt

您还可以包含路径信息以强制使用exe或批处理

E:\babak\git\bin\type e:/babak/git/bin/test.txt

.\type e:/babak/git/bin/test.txt

但如果您无法控制程序如何调用TYPE,那么我看不出您如何使用上述任何技术。

我能想到的唯一其他选项是预处理您的路径信息,将正斜杠转换为反斜杠。然后你需要确保你的程序获得修改后的路径信息。

答案 1 :(得分:1)

cmd.exe只是一个驻留在System32(或其他)目录中的程序。如果将其替换为新的cmd.exe,则只要用户运行cmd,就会运行该cmd.exe。

在替换文件之前会有许可问题需要解决,但并非不可能。

答案 2 :(得分:1)

您可以使用doskey覆盖command.com中的内部cmds,例如在win7上

c:\> date
  The current date is: Mon 09/18/2017
   Enter the new date: (mm-dd-yy)

c:\>   @doskey date=c:\cygwin\bin\date.exe $*
c:\>   @doskey echo=c:\cygwin\bin\echo.exe $*     

c:\> date +%Y-%m-%d
2017-09-18