2014-04-18 46 views
2

我找不到任何办法的事,例如,下列:命令提示:从任何文本文件执行命令(不具有“蝙蝠”或“.CMD”扩展)

cmd.exe /C "script.txt"

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

./script.txt

虽然家当#!/bin/sh)负责理解该文件实际上是一个脚本,它似乎像在Windows .bat.cmd扩展发挥相同的作用,表示命令提示符的批处理脚本文件。

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

注:请,不一样的答案:

给您的文件.bat.cmd扩展。

这不是问题所在。

+3

您的扩展名更改为'.bat'或'.CMD ';)(忍不住...) –

+0

http:// stackoverflow。com/questions/6818031/use-shebang-hashbang-in-windows-command-prompt –

+0

@a_horse_with_no_name:我知道这种方法,并且在发布之前尝试过。失败的主要原因在于'%1''将具有'.foo'扩展名,而不是'.bat'或'.cmd',因此不能执行'cmd.exe/C“”%1“%*”' 。因此,这种方法也无法工作... –

回答

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都具有立竿见影的效果,所以你可以开始.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

+0

我还考虑过重命名临时副本。事实上,这应该工作。然而,这感觉太过分了,但据我所知,这可能是唯一可行的解​​决方案。那Windows ... –

+0

我已经尝试了很多东西(主要在注册表中),但我认为这是禁止的。这是我找到的唯一方法。 – npocmaka

+0

我明白了,感谢您的快速转身! –

5

这取决于非批处理文件的复杂程度。如果非批处理文件不使用这些工具:

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

,那么你可以执行任何文件经由这一招是 “批处理文件”:

cmd < anyFile.ext 

this post

进一步详情
+0

这个限制是相当苛刻的说实话。无论如何,很高兴知道在某些情况下这可能是一种选择。谢谢。 –