【问题标题】:batch - how can I close a batch file that was started from another batch file批处理 - 如何关闭从另一个批处理文件启动的批处理文件
【发布时间】:2014-05-09 20:12:28
【问题描述】:

我无法理解如何自动关闭从另一个批处理文件启动的批处理文件。

我的第一个批处理文件如下所示:

@echo off

:logs
start C:\Users\Kenturrac\Desktop\copy.bat

timeout 2

goto logs

如您所见,我启动了另一个名为“copy.bat”的批处理文件,如下所示:

::set arma path
@set ARMAPATH=C:\Users\Administrator.WIN-B8I65OIU3DJ\Desktop\server\dayz_epoch_1

::set log path
@set LOGPATH=%ARMAPATH%\_LOGS
@set MOVEORCOPY=copy


:: Berechne Zeitstempel
@set DAY=%DATE:~0,2%
@set MONTH=%DATE:~3,2%
@set YEAR=%DATE:~6,4%
@set DATE=%YEAR%_%MONTH%_%DAY%

@set HH=%TIME:~0,2%
@IF "%TIME:~0,1%"==" " (
    set HH=0%TIME:~1,1%
)
@set MIN=%TIME:~3,2%
@set SEC=%TIME:~6,2%
@set TIME=%HH%%MIN%

@IF NOT EXIST "%LOGPATH%\%DATE%_%TIME%\" (
    @set TEMPPATH=%DATE%_-_%TIME%
) ELSE ( 
    @set TEMPPATH=%DATE%_-_%TIME%_%SEC%
)

@set TARGETPATH=%LOGPATH%\%TEMPPATH%\
@echo %TARGETPATH%

Exit /b

问题在于它没有关闭为“copy.bat”启动的附加 cmd 窗口。 如果我使用“call”而不是“start”,它会弄乱“temppath”变量。

【问题讨论】:

    标签: windows batch-file cmd


    【解决方案1】:

    假设第二个批处理文件所做的不仅仅是将环境变量设置为在新进程中启动批处理文件时将被丢弃的值,并且如果唯一不使用call而不是start的问题是保护第一个过程中的变量值,第二批使用setlocal / endlocal指令,避免文件关闭问题和变量值的干扰。

    【讨论】:

    • 在第二个批处理文件中设置变量后,它会继续复制文件。在这里似乎并不重要,所以我跳过了那部分。但是,是的,setlocal / endlocal 与 call 命令一起工作得很好。谢谢!如果我使用 start 命令,你能向我解释为什么他没有关闭窗口,因为我在第二个批处理文件的末尾使用了退出。
    • 尝试在开头使用@echo off
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多