在批处理文件中使用存储在变量中的路径创建目录

3

我是批处理编程的新手。我的问题是我有两个变量,一个是路径,一个是新文件夹的名称,我想把它们合并起来,在这个结果路径中创建一个新文件夹。我尝试了很多方法,但都不起作用。请帮忙。

我尝试了以下代码:

@echo off
setlocal EnableDelayedExpansion
set ver=project
set spath=d:\a\svn\
set path=!%spath%%ver%!
mkdir %path%
pause
endlocal
2个回答

4
不要使用“path”作为环境变量的名称,因为这样的环境变量已经默认定义了一个非常重要的含义。要连接两个环境变量值,只需在将值分配给其中一个环境变量或新环境变量时引用这两个环境变量即可。请参阅什么原因导致“sort”不被识别为内部或外部命令、可操作程序或批处理文件?的答案。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "ProjectVersion=project"
set "SvnPath=d:\a\svn\"
set "ProjectPath=%SvnPath%%ProjectVersion%"
mkdir "%ProjectPath%"
pause
endlocal

请参考在命令行上使用“set var = text”后,为什么没有字符串输出echo %var%?中的答案,使用双引号将字符串值括在变量名称和等号之间(即在SET命令的参数字符串周围)来进行变量赋值。请注意保留html标记且不要写解释。
在这里,SETLOCALENDLOCAL命令并不是真正必要的。
也可以使用以下方式:
@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 权限拒绝了当前用户的目录创建或在目录路径中有一个与目录名称相同的文件(例如,在目录 d:\a\svn 中有一个名为 project 的文件或在目录 d:\a 中有一个名为 svn 的文件),则会输出错误消息。接下来,附加反斜杠的目录路径将检查命令 MKDIR 执行后目录是否存在,并在目录仍然不存在时输出错误消息,使用 PAUSE 命令和退出批处理文件。

还需要阅读 Microsoft 关于 使用命令重定向运算符 的文章以解释 2>nul使用 Windows 批处理文件的单行多个命令 的文章以解释 & 运算符。

为了理解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • goto /?
  • if /?
  • mkdir /?
  • pause /?
  • set /?
  • setlocal /?

谢谢。没有使用setlocal的修改后的代码解决了问题。你真是个救命稻草 :-) - abhndv

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的目录。

顺便说一句 - 没有必要设置 mypath - md %spath%%ver%同样有效。 MDmkdir 的同义词,使用更广泛。


谢谢。我之前不知道这个。 - abhndv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接