首页 文章

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

提问于
浏览
2

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

cmd.exe /C "script.txt"

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

./script.txt

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

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

NOTE: 请不要回答:

提供.bat或.cmd文件扩展名 .

这不是问题所在 .

2 回答

  • 3

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

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

  • 5

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

    • 通过%1%2 ...访问批处理文件参数并执行SHIFT命令 .

    • 执行GOTO命令 .

    • 执行CALL:NAME命令(内部子程序) .

    • 执行SETLOCAL / ENDLOCAL命令 .

    然后你可以通过这个技巧执行任何文件"Batch file":

    cmd < anyFile.ext
    

    更多详情,请致电this post

相关问题