我可以运行一个简单的批处理文件在古老的传统中Windows 控制台主机(CMD),但在新Windows 终端它会引发错误并失败。
引发的各种错误:
我尝试将默认命令行更改为命令/电源外壳在新的终端但没有任何效果。我认为错误与运行蝙蝠在新文件中终端尽管我不确定为什么会这样。
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
使用相对路径,否则指定完整路径:%~dp0
pushd
start /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
- 关于
和set DIR=binariesPUSHD %DIR%
您没有使用DIR
变量,您可以在命令中直接使用路径pushd
,此外您甚至不需要在发布的命令中使用此变量:PUSHD "%~pd0binaries"