Command Prompt: Execute Commands from Any Text File (Not Having “.bat” or “.cmd” Extensions)

走远了吗. 提交于 2019-11-27 04:52:08

问题


I can't find any way to do, for example, the following:

cmd.exe /C "script.txt"

In other words, I need Command Prompt to (try) to execute file with any extension (not necessarily .bat or .cmd) if it contains valid batch script code. I'm looking for behavior similar to Unix shells:

./script.txt

While on Unix the shebang (#!/bin/sh) is responsible for understanding that the file is actually a script, it seems like on Windows .bat or .cmd extensions play the same role, indicating a batch script file for Command Prompt.

Is it possible to avoid that and force Command Prompt to interpret a file with any name?

NOTE: Please, no answers like:

Give your file .bat or .cmd extension.

That's not what the question is about.


回答1:


you first need an "installation" script :

   @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" %*

then try a simple .test file:

@echo off
for /l (1;1;10) do (
  echo testing .TEST extension
)

In fact ASSOC and FTYPE both have immediate effect so you can start a .test file right after "installation". With direct editing of the registry eventually you can get more control -> How to create file extension that behaves as .cmd/.bat? . Check also drop handlers -> http://msdn.microsoft.com/en-us/library/windows/desktop/cc144165%28v=vs.85%29.aspx




回答2:


This depends on the complexity of the NON-Batch file. If the NON-Batch file does not use these facilities:

  • Access to Batch file parameters via %1 %2 ... and execution of SHIFT command.
  • Execution of GOTO command.
  • Execution of CALL :NAME command (internal subroutine).
  • Execution of SETLOCAL/ENDLOCAL commands.

then you may execute any file as a "Batch file" via this trick:

cmd < anyFile.ext

Further details at this post



来源:https://stackoverflow.com/questions/23162474/command-prompt-execute-commands-from-any-text-file-not-having-bat-or-cmd

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!