命令提示符:从任何文本文件执行命令(没有" .bat"或" .cmd"扩展名)

时间:2014-04-18 21:15:20

标签: windows shell batch-file cmd file-extension

我无法找到任何方法,例如,以下内容:

cmd.exe /C "script.txt"

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

./script.txt

在Unix上, shebang #!/bin/sh)负责了解该文件实际上是一个脚本,它似乎在Windows .bat.cmd上扩展名扮演相同的角色,表示命令提示符的批处理脚本文件。

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

注意:请不要回答:

  

提供您的文件.bat.cmd分机。

这不是问题所在。

2 个答案:

答案 0 :(得分:5)

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

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

然后您可以将任何文件作为"批处理文件"执行。通过这个技巧:

cmd < anyFile.ext

this post

的详细信息

答案 1 :(得分:3)

你首先需要一个&#34;安装&#34;脚本:

   @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都会立即生效,因此您可以在安装&#34;之后立即启动.test文件。通过直接编辑注册表,您可以获得更多控制权 - &gt; How to create file extension that behaves as .cmd/.bat?。还检查丢弃处理程序 - &gt; http://msdn.microsoft.com/en-us/library/windows/desktop/cc144165%28v=vs.85%29.aspx