批处理文件名与windows关键字类似

时间:2016-01-25 04:49:30

标签: batch-file batch-processing

有没有办法,我可以创建一个名称类似于windows关键字的批处理文件。

示例: -

如果我创建了一个名为XYZ.bat的批处理文件并在环境变量路径中添加其位置,那么当我在cmd中键入XYZ时,将调用XYZ.bat文件。

我想用windows关键字做同样的事情,比如wmic或xcopy

有没有办法使用bat文件欺骗windows关键字

2 个答案:

答案 0 :(得分:1)

键入doskey /?以了解如何执行此操作。如果文件名相同,则顺序为com,exe,然后是bat(类型set pathext

doskey mymacro=c:\someprogram.exe

答案 1 :(得分:1)

注意 - 欺骗命令已成熟,可以滥用。请负责任地使用以下

正如bgalea所说,你可以使用doskey来定义一个宏。

例如,创建以下批处理脚本并将其放在PATH中包含的位置:

<强> echo.bat

@echo My echo: %*

然后使用DOSKEY为echo定义一个宏:

doskey echo=echo.bat $*

现在,当您尝试从命令行进行ECHO文本时,它将运行echo.bat:

C:\test>echo Hello world!
My echo: Hello world!

但是,DOSKEY宏在批处理脚本中不起作用。如果您希望替换脚本在另一个脚本中运行,则必须使用call echo。无论如何,这是必要的,因为除非使用CALL,否则批处理脚本不会返回给调用者。

<强> test.bat的

@echo off
echo Hello world!
call echo Goodbye!

- 输出 -

C:\test>test
Hello world!
My echo: Goodbye!

另请注意,DOSKEY宏在FOR IN()子句中不起作用。在这种情况下,您需要使用call echo

C:\test>for /f "delims=" %A in ('echo Hello world!') do @echo %A
Hello world!

C:\test>for /f "delims=" %A in ('call echo Hello world!') do @echo %A
My echo: Hello world!

DOSKEY宏也不能在管道的右侧工作。同样,需要使用CALL。 (这个例子有点奇怪,但它得到了重点)

C:\test>echo anything | echo Hello world!
Hello world!

C:\test>echo anything | call echo Hello world!
My echo: Hello world!

但是,DOSKEY宏在管道的左侧工作:

C:\test>echo Hello world! | findstr "^"
My echo: Hello world!