【问题标题】:batch file exits before input criteria is satisfied批处理文件在满足输入条件之前退出
【发布时间】:2015-08-04 16:41:00
【问题描述】:

我创建了一个批处理文件,可以在资源管理器中右键单击并询问用户文件夹名称。如果该文件夹已经存在,我想一直询问用户,直到输入一个不存在的文件夹。如果文件夹已经存在,则文件在两次运行后退出,我无法弄清楚为什么会发生这种情况。在我看来,它应该不断地调用 main ,直到它得到一个不存在的文件夹名称。见下方代码

set verbose=NO
@echo off

set mydir = %cd%
cd %mydir%
cls

call:main
echo returned from main
pause
goto:eof

:main
set /p job=Enter Job Name:
echo %job%
call:check
echo returned from check
if choice==1 call:main
echo returned from main
pause
if choice==2 call:createDirectory

:check
if exist %job% (echo Folder already exists set choice=1) else (set choice=2)
echo %choice%



:createDirectory
md "%job%"

md "%job%"\1.Development
md "%job%"\1.Development\1.Budgets
md "%job%"\1.Development\2.Manufacturers

md "%job%"\"2.Plans and Specs"
md "%job%"\"2.Plans and Specs"\1.Plans
md "%job%"\"2.Plans and Specs"\2.Specs

md "%job%"\3.Pricing
md "%job%"\3.Pricing\1.Quotes
md "%job%"\3.Pricing\2.Worksheets

md "%job%"\4.Sumbittals
md "%job%"\4.Sumbittals\"1.Submittal Reviews"

md "%job%"\5.Orders
md "%job%"\5.Orders\"1.Order Summaries"
md "%job%"\5.Orders\"2.Confirmation Pages"

md "%job%"\6.Closeout
md "%job%"\6.Closeout\"1.O&M Manuals"
md "%job%"\6.Closeout\2.Warranty

【问题讨论】:

  • :check,在两个命令之间添加一个“&”,echo Folder already exists & set choice=1

标签: batch-file if-statement recursion directory explorer


【解决方案1】:
  1. check 子例程不返回调用者而是继续到批处理文件的末尾,在echo %choice% 之后添加exit /b
  2. main 子例程中:在下一个标签之前添加goto main 使其循环
  3. 您递归调用:main,使用不带冒号的goto mainif choice==1 goto main 但实际上由于上面的#2,您不需要此行
  4. 使用&在一行中分隔命令:(echo Folder already exists & set choice=1)
  5. 使用%variable% 获取其值:if %choice%==2 call :createDirectory

这是:main:createDirectory 之间的更改代码:

:main
set /p job=Enter Job Name:
call:check
if %choice%==2 call :createDirectory
goto main

:check
if exist %job% (echo Folder already exists & set choice=1) else (set choice=2)
exit /b

【讨论】:

  • 感谢 wOxxOm!您唯一忘记提及的是在文件末尾添加退出以终止。如何在退出之前添加 3 秒等待?在调用之前添加 -w 3000 :createDirectory?
  • 1.您没有明确说明批次应该在成功的情况下退出。 2. timeout 3 在最后的exit 之前单独一行。
猜你喜欢
  • 2016-10-10
  • 2022-01-22
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
  • 2021-11-14
  • 1970-01-01
相关资源
最近更新 更多