在退出命令提示符窗口之前删除文件夹
Posted
技术标签:
【中文标题】在退出命令提示符窗口之前删除文件夹【英文标题】:Delete a folder before exiting the command prompt window 【发布时间】:2021-04-11 04:34:56 【问题描述】:我正在使用批处理脚本,用户可以在其中自动在 Windows 上创建文件夹和子文件夹。
这是实际代码:
@echo off
:: MAKES A TEMPORARY FOLDER FIRST
mkdir "New Folder 123"
:: LET THE USER INPUT PREFERED FOLDER NAME AND THIS WILL CHANGE THE TEMPORARY INTO THE NEW ONE
:rename
cls
SET /p comm=Please enter your prefered folder name:
IF /i "%comm%" == "%comm%" ren "New Folder 123" "%comm%"
IF /i "" == "%comm%" goto :rename
IF /i " " == "%comm%" goto :rename
:: COMMAND WILL OPEN THE NEWLY RENAMED FOLDER AND CREATES SUBFOLDER(S)
cd "%comm%"
md "Folder 1" "Folder 2"
exit
现在,问题是……如果用户不小心退出了命令提示符窗口,我最初从代码开头写的临时文件夹仍然存在。
:: MAKES A TEMPORARY FOLDER FIRST
mkdir "New Folder 123"
如果用户第二次运行批处理脚本,这将产生冲突,因为该临时文件夹已经存在,我不希望用户手动右键单击并删除它,因为这会很麻烦。
所以我希望是否有人可以提供一个代码,在用户(意外)退出控制台时自动删除初始文件夹?我一直在寻找与我密切相关的similar solutions,但它们似乎都删除了批处理文件本身而不是文件夹,我对制作程序也很陌生,我很难理解一些批处理代码,所以请放轻松,任何帮助将不胜感激,非常感谢大家。
【问题讨论】:
创建临时目录的唯一明显原因似乎是重命名它。为什么不直接询问新名称,然后直接创建新名称和子目录?哦,顺便说一句 -rename
是一个糟糕的标签名称。 ren
实际上是rename
命令的别名,使用命令名作为标签并不是一个好主意。
解决问题的方法很简单:不要先创建文件夹,然后提示用户输入用于重命名已创建文件夹的文件夹名称。最好先提示用户输入文件夹名称,然后检查是否不存在具有该名称的文件夹或文件,如果此条件为真,则使用用户输入名称创建文件夹并验证是否成功在执行后续步骤之前。 How to stop Windows command interpreter from quitting batch file execution on an incorrect user input?
请注意,如果执行cmd.exe
解释批处理文件时的当前目录不是用户有权创建目录的目录,则命令行mkdir "New Folder 123"
将失败。您可能希望当前目录是包含批处理文件的目录,并且用户始终具有在该目录中创建子目录所需的权限。这通常是一个完全错误的期望。事实上,批处理文件执行时的当前目录可以是任何目录。 Windows PC 上通常有超过 25.000 个目录。
如果当前目录已经包含一个名为New Folder 123
的文件,命令行mkdir "New Folder 123"
也会失败。所以我强烈建议不要先在没有验证的情况下在当前目录中创建一个由您定义的固定名称的目录。首先提示用户输入文件夹名称,验证输入字符串是否为有效的文件夹名称,验证当前目录中是否没有具有此名称的文件/文件夹,创建目录并验证目录创建是否成功。
如果目录位于共享网络位置,则复杂性会增加。两个或更多用户可以同时运行 .bat 脚本。如果他们都创建相同的目录怎么办?这有效吗?
【参考方案1】:
只需在@echo off 之后的文件开头添加这个
rmdir "New folder 123" /s /q >NUL 2>&1
【讨论】:
以上是关于在退出命令提示符窗口之前删除文件夹的主要内容,如果未能解决你的问题,请参考以下文章