Windows 如果存在,则在.BAT文件中不起作用
我正在尝试创建一个.Bat文件,该文件仅在Startapp.Bat文件退出时运行和复制的内容。当用户在github上提交代码时,会创建此startapp文件 我有以下脚本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
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”有不同的处理方式。关键是,当您在同一个括号内的代码块中写入和读取变量时。对于Windowscmd
中的路径,始终使用\
作为分隔符。