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 如果存在,则在.BAT文件中不起作用_Windows_Batch File - Fatal编程技术网

Windows 如果存在,则在.BAT文件中不起作用

Windows 如果存在,则在.BAT文件中不起作用,windows,batch-file,Windows,Batch File,我正在尝试创建一个.Bat文件,该文件仅在Startapp.Bat文件退出时运行和复制的内容。当用户在github上提交代码时,会创建此startapp文件 我有以下脚本 taskkill /F /IM Webshop.exe ::%~dp0 means the current folder where this .bat is executed from SET dest=%~dp0productionEnv IF EXIST "%~dp0startApp.bat" ( if no

我正在尝试创建一个.Bat文件,该文件仅在Startapp.Bat文件退出时运行和复制的内容。当用户在github上提交代码时,会创建此startapp文件

我有以下脚本

taskkill /F /IM Webshop.exe

::%~dp0 means the current folder where this .bat is executed from
SET dest=%~dp0productionEnv

IF EXIST "%~dp0startApp.bat" (
    if not exist "%dest%" mkdir "%dest%" 
    xcopy /Y /s "%~dp0Webshop\bin\Debug" "%dest%"
    SET webDest="%dest%/webContent"

    if not exist %webDest% mkdir %webDest% 
    xcopy /Y /s "%~dp0Webshop\webContent\web" %webDest%
    copy /Y "%~dp0startApp.bat" "%dest%/startApp.bat"
    START "" "%dest%/startApp.bat"
    del "%~dp0startApp.bat"
    echo "Deleted startApp.bat"

) ELSE (
    echo "startApp.bat file not found"
)
但它不起作用。有时,它会回显已删除的消息和未找到文件的消息,但这不可能。它应该响应其中一条消息,但不能同时响应这两条消息。这就是为什么有一个if-else


请帮忙

我不确定代码中是否还有更多错误,但我至少发现了一个:

SET webDest="%dest%/webContent"

if not exist %webDest% mkdir %webDest%
因此,如果文件夹不存在,则执行以下命令行:

mkdir %webDest%
其中
%webDest%
%dest%/webContent”
表示
%dp0productionEnv/webContent

这一行导致一个错误。windows中的路径字符串中有两个可能的分隔符:正确的分隔符是
\
,错误的分隔符(但仍受支持)
/
<代码>\来自DOS和windows,而
/
来自UNIX。虽然windows通常非常聪明,可以解析命令,甚至允许您将
\
/
混合使用,
mkdir
命令不允许这样做

这意味着:
mkdir C:\some\folder
将起作用,但
mkdir C:/some/folder
mkdir C:\some/folder
将不起作用


编辑:同样适用于
xcopy
/
之后的所有内容都被视为参数,而不是路径的一部分。

前斜杠已修复,如果块已更改,则不必要:

Taskkill/F/IM Webshop.exe
如果不存在“%~dp0startApp.bat”(
未找到Echo=startApp.bat文件
转到下一个
)
Rem%~dp0表示执行此.bat的当前文件夹
设置“dest=%~dp0productionEnv”
设置“webDest=%dest%\webContent”
如果不存在“%dest%”MD“%dest%”
XCopy“%~dp0Webshop\bin\Debug”“%dest%”/Y/S
如果不存在“%webDest%”MD“%webDest%”
XCopy“%~dp0Webshop\webContent\web”“%webDest%”/Y/S
复制/Y“%~dp0startApp.bat”“%dest%”
调用“%dest%\startApp.bat”
Del“%~dp0startApp.bat”
Echo=已删除的startApp.bat
:下一个

您正在代码块内设置变量,文件路径通常在Windows中使用反斜杠
echo“%~dp0startApp.bat”
的结果是什么?您在哪个环境下工作?XP之前的操作系统对“IF EXIST”有不同的处理方式。关键是,当您在同一个括号内的代码块中写入和读取变量时。对于Windows
cmd
中的路径,始终使用
\
作为分隔符。