在cmd批处理中将目录名称分配给变量

在cmd批处理中将目录名称分配给变量

我想检索一个文件名并将其分配给一个变量,以便可以在脚本中进一步使用它。

set directoryName = dir Docum?nt*
echo %directoryName%

但是一旦我执行批处理文件,我得到的就是这个。

D:\ >a.bat
D:\ >set directoryName = dir Docum?nt*
D:\ >echo
ECHO is on.

我如何确保我的变量已被分配值,即目录名称,以便我可以开始编写进一步的脚本。

我的a.bat包含:

set directoryName=dir Docum?nt*
echo %directoryName%

删除空格后:

D:\Workspace>set directoryName=dir Docum?nt*

D:\Workspace>echo dir Docum?nt*
dir Docum?nt*

我猜,vairbale 已被分配了整个值以及命令关键字,而不是结果。我预计输出是目录名称,即Documentation

答案1

变量设置的等号前后有空格,只需将其删除并使用下面的方法即可。

@ECHO ON

set directoryName=dir Docum?nt*
echo %directoryName%

错误的

  • set directoryName = dir Docum?nt*

正确的

  • set directoryName=dir Docum?nt* 在此处输入图片描述

隐式 FOR 循环

FOR /F "TOKENS=*" %%F IN ('DIR /B /AD "Docum?nt*"') DO SET directoryName=%%~F

递归 FOR 循环

FOR /F "TOKENS=*" %%F IN ('DIR /B /AD /S "Docum?nt*"') DO SET directoryName=%%~F

更多资源

答案2

如果您想要设置匹配的目录名Docum?nt*,那么您需要的是:

for /d %%d in (Docum?nt*) do set directoryName="%%d"

如果多个目录与掩码匹配,则您只会得到其中一个匹配项。如果您需要变量来保存匹配目录的列表,则需要使用for /f

答案3

没有空间。

如果必须在名称中使用空格,请采用以下格式:

set directoryName = "dir Docum?nt*"

要么“”或者没有空间

答案4

我希望输出是目录名称,即Documentation

除非Documentation跑步您已存储在变量中的命令。

使用以下批处理文件(test.cmd):

@echo off
setlocal
set directoryName=dir Docum?nt*
rem run command
cmd /c %directoryName%
pause 
endlocal

示例输出:

> test
dir Docum?nt*
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

09/03/2017  17:10    <DIR>          Documentation
               0 File(s)              0 bytes
               1 Dir(s)  1,701,065,842,688 bytes free

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 适合所有人的绝佳参考
  • 命令- 启动一个新的 CMD shell 并(可选)运行命令/可执行程序。
  • 目录- 显示文件和子文件夹的列表。
  • - 显示、设置或删除 CMD 环境变量。使用 SET 所做的更改将仅在当前 CMD 会话期间保留。

相关内容