假设我有一个文本文件,它包含批处理命令。如何将该文本文件作为批处理文件从一个文件中运行,不用重命名它。我也想保留一个便携式方面,所以没有注册表键等。
没有重命名的原因是在意外关闭时也会阻止剩余未发布的文件。
答案 0 :(得分:3)
我很确定你不能做你想做的事。 Windows不允许您将操作系统配置为将任何其他扩展名识别为批处理文件。仅支持.bat
和.cmd
。
您可以使用FOR / F循环在文本文件中处理一系列简单命令,但这将是非常严格的。例如,它不支持IF
,FOR
,GOTO Label
或CALL :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
与前面的答案一样,有几个命令在此文件中无效,例如GOTO
,SETLOCAL
等。但是,多行嵌套if
和for
命令执行只要可替换参数只使用百分之一(就像在命令行中一样)。
虽然此方法在屏幕上显示已执行的命令(@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