【发布时间】:2020-05-07 12:32:57
【问题描述】:
我正在尝试借助来自file1.bat 的make_dir 函数和来自同一文件的主文件夹内的子文件夹来创建主目录。
file1.bat内容:
:make_dir
@IF NOT EXIST "Web_Files" (mkdir Web_Files)
ECHO Web_Files Directory Created
@IF NOT EXIST "C++ Files" (mkdir C++ Files)
ECHO C++ Files Directory Created
EXIT /B 0
:make_sub_dir
@IF NOT EXIST "Web_Files" (mkdir Web_Files)
ECHO Web_Files Directory Created
ECHO Creating %~2 Directory
@IF NOT EXIST "Web_Files\%~2" (mkdir Web_Files\%~2)
ECHO %~2 Directory Created
EXIT /B 0
来自file2.bat 我将此函数称为:
SET "HTMLSubFolder=HTML"
SET "CSSSubFolder=CSS"
SET "JSSubFolder=JS"
call file1.bat make_dir
call file1.bat make_sub_dir %HTMLSubFolder%
call file1.bat make_sub_dir %CSSSubFolder%
call file1.bat make_sub_dir %JSSubFolder%
来自file2.bat 函数调用,仅创建主文件夹,但未创建子文件夹。
【问题讨论】:
-
call命令可以调用另一个批处理文件或当前批处理文件中的标签。要在某个标签处输入另一个批处理文件,您必须输入一些额外的代码。例如,您可以在file1.bat的开头放置goto :%~1行,因此第一个参数被视为目标标签... -
T检查目录是否存在,语法为
… EXIST "Dir Name\" …,(反斜杠很重要,确保同名文件不会被混淆为目录)。此外,您告诉最终用户创建了一个目录,但您尚未确定是否是这种情况。你告诉了它,不代表它成功了,所以我建议你也看看。 -
@aschipfl 您能否将您的建议添加到答案中?没有得到你想要说的话。
-
@Compo 我只在它们之前不存在的情况下创建那些目录,是的,我正在使用反斜杠。
-
@Compo,我曾经使用
if exist "dir\"方法,直到我最近发现这仅适用于本地驱动器,但当目标项目位于共享/映射网络上时它不起作用驱动器(net use ...),因为当项目实际上是一个文件时,带有尾随反斜杠的语法甚至报告了True;不确定(还)是否也是subst或pushd映射的驱动器的情况(但我会测试),或者我系统中的特定星座是否是根本原因,但这让我改用for %I in ("dir") do set "ATTR=%~aI" & if "!ATTR:~,1!"=="d" echo Dir!...
标签: windows batch-file cmd subroutine