Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows XP或更高版本Windows:如何在没有显示窗口的情况下在后台运行批处理文件?_Windows_Batch File_Cmd_Wsh - Fatal编程技术网

Windows XP或更高版本Windows:如何在没有显示窗口的情况下在后台运行批处理文件?

Windows XP或更高版本Windows:如何在没有显示窗口的情况下在后台运行批处理文件?,windows,batch-file,cmd,wsh,Windows,Batch File,Cmd,Wsh,我知道我已经回答了一个类似的问题(),但这次我需要启动一批: 从另一批, 没有显示任何控制台窗口 将所有参数传递给不可见批处理 第一批在控制台窗口中执行。但是,我不希望第二批(第一批以异步方式启动)也显示控制台窗口 我已经提出了一个VBScript脚本,它就是这样做的,我把这个脚本作为一个例子,但是如果你有其他的想法/解决方案,请随意贡献 注意:许多人将Windows命令处理器的控制台窗口命名为“并非真正正确的DOS窗口” 谢谢大家的回答。据我所知,如果我需要异步调用脚本以不可见模式运行:

我知道我已经回答了一个类似的问题(),但这次我需要启动一批:

  • 从另一批,
  • 没有显示任何控制台窗口
  • 将所有参数传递给不可见批处理
第一批在控制台窗口中执行。但是,我不希望第二批(第一批以异步方式启动)也显示控制台窗口

我已经提出了一个VBScript脚本,它就是这样做的,我把这个脚本作为一个例子,但是如果你有其他的想法/解决方案,请随意贡献

注意:许多人将Windows命令处理器的控制台窗口命名为“并非真正正确的DOS窗口”


谢谢大家的回答。据我所知,如果我需要异步调用脚本以不可见模式运行:

  • 从已经在控制台窗口中的第二个脚本开始,
    start/b
    就足够了
  • 在Windows中,在不触发第二个窗口的情况下,我的解决方案仍然有效

    • 以下是一个可能的解决方案:

      在第一个脚本中,使用以下行调用第二个脚本:

      wscript.exe invis.vbs run.bat %*
      
      实际上,您正在使用以下命令调用vbs脚本:

      • 脚本的[路径]\n名称
      • 脚本所需的所有其他参数(
        %*
      然后,Invi.vbs将使用调用脚本,这需要:

      • IntWindowsStyle:0表示“不可见窗口”
      • bWaitOnReturn:false表示第一个脚本不需要等待第二个脚本完成
      以下是Invi.vbs:

      set args=WScript.Arguments
      num=args.Count
      如果num=0,则
      Echo“用法:[CScript|WScript]invi.vbs aScript.bat”
      WScript.Quit 1
      如果结束
      sargs=“”
      如果num>1,则
      sargs=“”
      对于k=1到num-1
      anArg=参数项(k)
      sargs=sargs&anArg&“
      下一个
      如果结束
      设置WshShell=WScript.CreateObject(“WScript.Shell”)
      WshShell.Run“”&WScript.Arguments(0)和“”&sargs,0,False
      
      是否需要第二个批处理文件异步运行?通常,一个批处理文件与
      call
      命令同步运行另一个批处理文件,第二个批处理文件将共享第一个批处理文件的窗口


      可以使用
      start/b
      second.bat从共享第一批文件窗口的第一批文件同步启动第二批文件a。如果两个批处理文件同时写入控制台,则输出将重叠,可能无法识别。此外,您还需要在第二个批处理文件的末尾放置一个
      exit
      命令,或者在完成所有操作后,您将在第二个
      cmd
      shell中。

      在我建议的另一个问题中。在这种情况下,这也是可能的。只需将服务设置为手动运行(即启动时不自动)。要运行批处理时,请修改autoexnt.bat文件以调用所需的批处理文件,然后启动autoexnt服务

      启动此操作的批处理文件可以如下所示(未测试):

      请注意,以这种方式启动的批处理文件以系统用户身份运行,这意味着您无法自动访问网络共享。但是您可以使用netuse连接到远程服务器


      你必须得到它。资源工具包也可以安装在其他版本的windows上,如windows XP。

      将批处理文件转换为exe。请尝试或,然后选择将其作为重影应用程序运行的选项,即无窗口

      在不同的用户名下运行它,使用“runas”或在Windows计划的任务中在不同的用户下调度它。

      我认为这是在不打开DOS窗口的情况下运行批处理文件的最简单和最短的解决方案,当您要计划定期运行一组命令时,这可能会让您分心,所以DOS窗口不断弹出,这是你的解决方案。 使用VBS脚本调用批处理文件

      Set WshShell=CreateObject(“WScript.Shell”)
      运行chr(34)和“C:\Batch Files\mycommands.bat”&chr(34),0
      设置WshShell=Nothing
      

      将上面的行复制到编辑器中,并以.VBS扩展名保存文件。相应地编辑.BAT文件名和路径。

      您可以通过.vbs文件运行.BAT文件
      将以下代码复制到.vbs文件中:

      Dim WshShell
      Dim obj
      Set WshShell = WScript.CreateObject("WScript.Shell") 
      obj = WshShell.Run("C:\Users\file1.bat", 0) 
      obj = WshShell.Run("C:\Users\file2.bat", 0)  and so on
      set WshShell = Nothing 
      

      对于自隐藏,您可以使用和:


      以下是我收集的实现方法——甚至更多——在可能的情况下,我还尝试返回已启动流程的PID(所有链接的脚本都可以下载并使用您认为方便的任何名称保存):

    • 解决方案甚至可以在旧的win 95/98机器上使用。Iexpress是一个非常古老的工具,它仍然与Windows打包在一起,因为参数只接受命令及其参数
    • 用法示例:

      call IEXPhidden.bat "cmd /c myBat.bat"  "argument"
      
      call SCHPhidden.bat "cmd /c myBat.bat"  "argument"
      
    • -再次只接受两个参数-命令和参数。还检查它是否以提升的权限启动,如果可能,使用WEVTUTIL(可从Vista及更高版本获得,因此较新版本的windows将接收PID)命令获取进程的PID
    • 用法示例:

      call IEXPhidden.bat "cmd /c myBat.bat"  "argument"
      
      call SCHPhidden.bat "cmd /c myBat.bat"  "argument"
      
    • -该脚本是“WScript.Shell”的完整包装,所有可能的选项都可以通过命令行选项进行设置。它是jscript/批处理的混合体,可以被称为bat
    • 用法示例(有关更多信息,请使用“-h”打印帮助):

    • -同样,可以通过命令行参数访问完整包装器和所有选项。这次它是WSF/批处理与一些Jscript和一些VBScript代码片段的混合-但它返回启动进程的PID。如果进程未隐藏,则可以使用一些选项,如X/Y坐标(不适用于每个可执行文件-例如cmd.exe接受坐标)
    • 用法示例(有关更多信息,请使用“打印帮助”-
      call ShellRunJS.bat "notepad.exe" -style 0 -wait no 
      
      call win32process.bat "notepad" -arguments "/A openFile.txt"  -showWindows 0 -title "notepad"
      
      call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal
      
      start /MIN notepad.exe
      
      start /MIN calc.exe