为什么 Windows 批处理文件在传统的 Windows 控制台主机中可以工作,但在新的 Windows 终端中却会抛出错误

为什么 Windows 批处理文件在传统的 Windows 控制台主机中可以工作,但在新的 Windows 终端中却会抛出错误

我可以运行一个简单的批处理文件在古老的传统中Windows 控制台主机(CMD),但在新Windows 终端它会引发错误并失败。

两个不同的命令行

引发的各种错误:

错误1 错误2 错误3

我尝试将默认命令行更改为命令/电源外壳在新的终端但没有任何效果。我认为错误与运行蝙蝠在新文件中终端尽管我不确定为什么会这样。

Bat文件源代码:

@echo off

echo kill current binaries

cmd /c TASKKILL /F /IM nginx* > nul 2> nul
cmd /c TASKKILL /F /IM V-* > nul 2> nul


set DIR=binaries
PUSHD %DIR%
cd

FOR %%F IN (
    V-DBV_*.exe
    ) DO start /w /b %%F

FOR %%F IN (
    V-FC_*.exe
    V-AGS_*.exe
    V-T4CA_*.exe
    V-FIO_*.exe
    ) DO start /b %%F > NUL

POPD
start /b nginx\nginx -c conf\nginx_generic_test.conf -p .\nginx
echo "test started" 

尽管与以下相关的错误被抛出nginx,据我所知,这个问题与nginx蝙蝠文件在传统Windows 控制台主机

如果有人对此问题有建议或解决方案,请告诉我。

答案1

在此处输入图片描述

Terminal正在调用cmd.exe(命令解释器)来执行来自您的指令file.bat,并且由于cmd.exe路径是C:\Windows\System32,它找不到您的文件夹,因此无法继续执行和/或子文件夹nginx中的可执行文件 。\binary\nginx


  • 假设你的 bat 在与子文件夹相同的根文件夹中启动,在你的(和)命令中binaries使用相对路径,否则指定完整路径:%~dp0pushdstart /d "D:\full\path
@ECHO OFF


PUSHD "%~pd0binaries"
ECHO."%CD%"

ECHO kill current binaries

FOR %%F IN (
    nginx*.exe
    V-*.exe
    ) DO TASKKILL /f /im "%%~F" > nul 2> nul

FOR %%F IN (
    V-DBV_*.exe
    ) DO START "" /w /b "%%~F"

FOR %%F IN (
    V-FC_*.exe
    V-AGS_*.exe
    V-T4CA_*.exe
    V-FIO_*.exe
    ) DO START "" /b "%%~F" > nul

POPD
START "" /b /d "%~pd0nginx" nginx.exe -c "%~pd0nginx\conf\nginx_generic_test.conf" -p "%~pd0nginx"
ECHO "test started" 

  • 关于START /D

Start an application and specify where files will be saved (Working Directory):
  START /D C:\Documents\ /MAX "Maximised Notes" notepad.exe


  • 关于%~dp0

这是什么%~dp0意思?它是如何起作用的?


  • 关于set DIR=binariesPUSHD %DIR%

您没有使用DIR变量,您可以在命令中直接使用路径pushd,此外您甚至不需要在发布的命令中使用此变量:PUSHD "%~pd0binaries"

相关内容