将非bat扩展文件作为批处理文件运行

时间:2014-01-20 19:16:52

标签: windows batch-file cmd portability

假设我有一个文本文件,它包含批处理命令。如何将该文本文件作为批处理文件从一个文件中运行,不用重命名它。我也想保留一个便携式方面,所以没有注册表键等。

没有重命名的原因是在意外关闭时也会阻止剩余未发布的文件。

5 个答案:

答案 0 :(得分:3)

我很确定你不能做你想做的事。 Windows不允许您将操作系统配置为将任何其他扩展名识别为批处理文件。仅支持.bat.cmd

您可以使用FOR / F循环在文本文件中处理一系列简单命令,但这将是非常严格的。例如,它不支持IFFORGOTO LabelCALL :Label。可能还有其他限制。在主批处理文件中,您可以拥有以下内容:

for /f delims^=^ eol^= %%A in (script.txt) do %%A

如果通过新的CMD.EXE shell执行命令,则可能支持IF和/或FOR,但是您无法保留可能由SET设置的变量的值。命令。

for /f delims^=^ eol^= %%A in (script.txt) do cmd /c "%%A"

答案 1 :(得分:3)

type some.txt>temp.bat
call temp.bat
del /q /f temp.bat 

是否正在创建一个临时文件作弊?在问题中没有提到它的限制。虽然你可以因为del命令而松开%ERRORLEVEL%,但你可以将它保存在临时变量中:

type some.txt>temp.bat
call temp.bat
set temp_el=%errorlevel%
del /q /f temp.bat
exit /b %temp_el% 

答案 2 :(得分:3)

最简单的方法是:

cmd < file.txt

与前面的答案一样,有几个命令在此文件中无效,例如GOTOSETLOCAL等。但是,多行嵌套iffor命令执行只要可替换参数只使用百分之一(就像在命令行中一样)。

虽然此方法在屏幕上显示已执行的命令(@echo off在此处不起作用),但您可以将输出重定向到NUL,并在“批处理”文件中将所需的输出重定向到CON。例如,这是 test.txt

@echo off
echo Hello World! > CON

(for /L %a in (1,1,10) do (
   echo Turn: %a
   if %a equ 4 echo TURN NUMBER FOUR!
)) > CON

输出示例:

C:\> cmd < test.txt > NUL
Hello World!
Turn: 1
Turn: 2
Turn: 3
Turn: 4
TURN NUMBER FOUR!
Turn: 5
Turn: 6
Turn: 7
Turn: 8
Turn: 9
Turn: 10

答案 3 :(得分:1)

请参阅windows shell命令

  • assoc。将文件扩展名(例如* .txt)与文件类型相关联。
  • ftype。允许您创建一个新文件类型,告诉Windows shell如何打开特定类型的文件。

在命令提示符下,输入assoc /?ftype /?会为您提供帮助。或者使用google-fu查找MS文档。

*.bat映射到文件类型batfile; *.cmd已映射到文件类型cmdfile。在Windows 7中它们是相同的。如果您希望能够将名为*.foobar的文件作为批处理文件运行,只需键入:

assoc .foobar=cmdfile

然后,假设路径上存在名为“sillyness.foobar”的文件,您只需键入

c:\> sillyness

它将找到sillyness.foobar并将其作为批处理文件执行。当您拥有相同名称和不同扩展名的文件时,Windows shell优先考虑如何解决冲突(.com vs .cmd vs .bat等)

这样的东西
assoc .pl=perlscript
ftype perlscript=perl.exe %1 %*

会让你运行perl脚本,好像它们是.bat文件一样。

答案 4 :(得分:0)

如果您的批处理命令是简单的顺序命令,那么您可以在命令提示符下使用它。将%符号加倍,以便在批处理文件中使用。

for /f "delims=" %a in (file.txt) do %a