有没有办法,我可以创建一个名称类似于windows关键字的批处理文件。
示例: -
如果我创建了一个名为XYZ.bat的批处理文件并在环境变量路径中添加其位置,那么当我在cmd中键入XYZ时,将调用XYZ.bat文件。
我想用windows关键字做同样的事情,比如wmic或xcopy
有没有办法使用bat文件欺骗windows关键字
答案 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!