命令提示符:从任何文本文件执行命令(不包含“.bat”或“.cmd”扩展名)

我无法find任何方法,例如:

cmd.exe /C "script.txt"

换句话说,如果包含有效的批处理脚本代码,我需要命令提示符(尝试)执行带有任何扩展名(不一定是.bat.cmd )的文件。 我正在寻找类似Unix shell的行为:

./script.txt

而在Unix上, shebang#!/bin/sh )负责理解文件实际上是一个脚本,看起来像在Windows.bat.cmd扩展名扮演同样的angular色,表示命令提示符的批处理脚本文件。

是否有可能避免这种情况,并强制命令提示符解释一个任何名称的文件?

注意:请不要这样的答案:

给你的文件.bat.cmd扩展名。

这不是问题的关键。

你首先需要一个“安装”脚本:

  @echo off rem :: A files with .TEST extension will be able to execute batch code but is not perfect as the %0 argument is lost rem :: "installing" a caller. if not exist "c:\caller.bat" ( echo @echo off echo copy "%%~nx1" "%%temp%%\%%~nx1.bat" /Y ^>nul echo "%%temp%%\%%~nx1.bat" %%* ) > c:\caller.bat rem :: associating file extension assoc .test=batps ftype batps=c:\caller "%%1" %* 

然后尝试一个简单的.test文件:

 @echo off for /l (1;1;10) do ( echo testing .TEST extension ) 

实际上, ASSOCFTYPE都可以立即生效,所以你可以在“安装”之后立即启动一个.test文件。 直接编辑注册表,最终你可以得到更多的控制 – > 如何创建文件扩展名,行为如.cmd / .bat? 还检查下拉处理程序 – > http://msdn.microsoft.com/en-us/library/windows/desktop/cc144165%28v=vs.85%29.aspx

这取决于NON-Batch文件的复杂性。 如果NON-Batch文件不使用这些设施:

  • 通过%1%2 …访问批处理文件参数并执行SHIFT命令。
  • 执行GOTO命令。
  • 执行CALL:NAME命令(内部子程序)。
  • 执行SETLOCAL / ENDLOCAL命令。

那么你可以执行任何文件作为“批处理文件”通过这个技巧:

 cmd < anyFile.ext 

在这篇文章的更多细节