我正在尝试创建一个只运行和复制文件的.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。
请帮忙!
答案 0 :(得分:1)
我不确定代码中是否有更多错误,但我发现至少有一个错误:
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
。 /
之后的所有内容都被视为参数,而不是路径的一部分。
答案 1 :(得分:1)
这里有正确的正斜杠固定和不必要的if块更改:
Taskkill /F /IM Webshop.exe
If Not Exist "%~dp0startApp.bat" (
Echo= startApp.bat file not found
GoTo Next
)
Rem %~dp0 means the current folder where this .bat is executed from
Set "dest=%~dp0productionEnv"
Set "webDest=%dest%\webContent"
If Not Exist "%dest%" MD "%dest%"
XCopy "%~dp0Webshop\bin\Debug" "%dest%" /Y /S
If Not Exist "%webDest%" MD "%webDest%"
XCopy "%~dp0Webshop\webContent\web" "%webDest%" /Y /S
Copy /Y "%~dp0startApp.bat" "%dest%"
Call "%dest%\startApp.bat"
Del "%~dp0startApp.bat"
Echo= Deleted startApp.bat
:Next