![两个批处理文件无法一起工作,问题出在哪里?](https://linux22.com/image/1508912/%E4%B8%A4%E4%B8%AA%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E6%97%A0%E6%B3%95%E4%B8%80%E8%B5%B7%E5%B7%A5%E4%BD%9C%EF%BC%8C%E9%97%AE%E9%A2%98%E5%87%BA%E5%9C%A8%E5%93%AA%E9%87%8C%EF%BC%9F.png)
我在 F:\ 目录中有一个名为 fix.bat 的文件,我需要将其移动到 C:\Users。出于一个好的理由,我决定在 fix.bat 中编写一个文件,该文件将在启动 fix.bat 时创建,并将 fix.bat 从 F:\ 目录移动到 C:\Users,启动 fix.bat,并在所有这一切过程中在 C:\Users 中创建几个文件夹。
现在,在 fix.bat 文件的最开始处,会进行检查以确定 fix.bat 是否已在 C:\Users 中。如果是,则不生成 start.bat,但 fix.bat 会继续执行其任务。如果不是,则生成 start.bat 并将 fix.bat 移至 C:\Users。至少这个想法是这样的。
但不知为何,它却无法工作。结果,CMD 窗口无限循环打开,我不得不重启电脑。
以下是fix.bat代码的相关部分:
@echo off
if %cd% == C:\Users goto z
if not %cd% == C:\Users goto x
:x
echo pushd c:\users >>start.bat
echo md results-main >>start.bat
echo cd results-main >>start.bat
echo md results-e >>start.bat
echo md results-p >>start.bat
echo md results-s >>start.bat
echo md results-x >>start.bat
echo pushd %cd% >>start.bat
echo move fix.bat c:\users >>start.bat
echo pushd c:\users >>start.bat
echo start fix.bat >>start.bat
call start.bat
exit
:z
insert code here
答案1
1:让 FIX.bat 在写入 Start.bat 之前先将其删除 --- 因为它会不断向其添加内容,因此会变得越来越长。这可能是您看到它反复运行的原因。
2:将“start.bat”重命名为其他名称以避免混淆。
3:不要使用“call start.bat”,而只需使用简单的“start.bat”,因为您要确保 fix.bat 没有被 CMD 保持打开状态,而且您也不想继续运行它。
4:在start.bat中,将move fix.bat C:\users更改为move fix.bat C:\users || echo MOVE FAILED
“||”运算符表示“如果移动失败,则执行回显”
您必须转义 | 字符:echo move fix.bat C:\users >>qstart.bat ^|^| echo MOVE FAILED