我是批处理编程的新手。问题是我在2个变量中有一个路径和一个新的文件夹名称,所以我想连接它并在该结果路径中创建一个新文件夹。我尝试了很多东西但没有任何效果。请帮忙
我试过这段代码
@echo off
setlocal EnableDelayedExpansion
set ver=project
set spath=d:\a\svn\
set path=!%spath%%ver%!
mkdir %path%
pause
endlocal
答案 0 :(得分:3)
不要将path
用作环境变量的名称,因为默认情况下已经定义了这样的环境变量具有非常重要的含义,请参阅What is the reason for 'sort' is not recognized as an internal or external command, operable program or batch file?上的答案
要连接两个环境变量值,只需在将值分配给两个环境变量之一或新环境变量时引用这两个环境变量。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "ProjectVersion=project"
set "SvnPath=d:\a\svn\"
set "ProjectPath=%SvnPath%%ProjectVersion%"
mkdir "%ProjectPath%"
pause
endlocal
另请参阅Why is no string output with 'echo %var%' after using 'set var = text' on command line?上的答案,原因是set "variable=value"
使用带有双引号的字符串值到变量赋值,即围绕命令 SET 的参数字符串。
此处不一定非常需要 SETLOCAL 和 ENDLOCAL 命令。
可能还会:
@echo off
set "ProjectVersion=project"
set "SvnPath=d:\a\svn\"
set "ProjectPath=%SvnPath%%ProjectVersion%"
mkdir "%ProjectPath%" 2>nul
if not exist "%ProjectPath%\" echo Failed to create directory "%ProjectPath%" & pause & goto :EOF
上面的批处理文件通过将 STDERR 重定向到设备 NUL 来创建禁止显示任何错误消息的目录。如果目录已经存在或者无法创建目录,则输出错误消息,因为NTFS权限拒绝为当前用户创建文件夹,或者在目录路径中存在具有路径中目录名称的文件,例如,目录project
中有一个名为d:\a\svn
的文件,或者目录svn
中有一个文件d:\a
。带有反斜杠的下一个命令附加到目录路径,在执行命令 MKDIR 后检查目录是否存在,并输出带有 PAUSE 的错误消息,当目录仍然存在时,下一个退出批处理文件不存在。
另请阅读Microsoft文章Using Command Redirection Operators,了解2>nul
和Single line with multiple commands using Windows batch file对&
运算符的解释。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
echo /?
endlocal /?
goto /?
if /?
mkdir /?
pause /?
set /?
setlocal /?
答案 1 :(得分:2)
@echo off
setlocal EnableDelayedExpansion
set version=project
set spath=d:\a\svn\
set mypath=%spath%%version%
mkdir %mypath%
pause
endlocal
path
是保留名称 - 它定义了在当前目录中找不到可执行文件时搜索可执行文件的目录序列。如果你改变它,那么 - 简而言之,幽暗
ver
不是保留名称,但 是内置实用程序的名称,并且对变量名称选择不佳。
您的代码正在尝试将所需的新路径名设置为变量d:\a\svn\project
的内容。由于此变量不太可能存在,您可能会尝试创建名为 nothing 的目录。
btw - 无需设置mypath
- md %spath%%ver%
也可以正常工作。 MD
是mkdir
的同义词,经常使用。