将批处理目录输出保存到变量

Posted

技术标签:

【中文标题】将批处理目录输出保存到变量【英文标题】:save batch dir output to a variable 【发布时间】:2015-06-11 14:53:38 【问题描述】:

我有一个部分文件名。我正在使用通配符执行目录以获取完整的文件名。我正在寻找一种方法来检查文件是否存在,然后将完整的文件名保存到变量中。

到目前为止,这不起作用。

    if exist file_00001_%Yr%%Mth%0%newDate%*.pcap (
        echo file is here
        FOR /F %i IN ('dir file_00001_%Yr%%Mth%0%newDate%*.pcap') DO SET newTestFile=%i
        echo %newTestFile%
    ) else (
        echo file is not here
    )

我的代码确实验证了文件确实存在,但是一旦我得到文件名,我想将它保存到一个变量中,以便能够剥离文件名中随机创建的部分。

【问题讨论】:

【参考方案1】:

确定您需要延迟扩展,并且您需要使用 dir /b 去除不必要的数据并为标记加倍 %

 setlocal enableDelayedExpansion
 if exist file_00001_%Yr%%Mth%0%newDate%*.pcap (
    echo file is here
    FOR /F %%i IN ('dir /b /a-d file_00001_%Yr%%Mth%0%newDate%*.pcap') DO SET "newTestFile=%%~i"
    echo !newTestFile!
) else (
    echo file is not here
)

或者你可以优化代码

 setlocal enableDelayedExpansion
 if exist file_00001_%Yr%%Mth%0%newDate%*.pcap (
    echo file is here
    FOR  %%i IN ("file_00001_%Yr%%Mth%0%newDate%*.pcap") DO SET "newTestFile=%%i"
    echo !newTestFile!
) else (
    echo file is not here
)

【讨论】:

我从上面的优化代码中得到了这个。文件在这里 dir file_00001_20150609*.pcap file_00001_20150609*.pcap 文件在这里 dir file_00001_20150609*.pcap 我想获得完整的文件名,而不仅仅是我现在拥有的部分名称。完整的文件名是。 file_00001_201506094578902.pcap 文件的 4578902 部分是随机生成的字符串。我正在寻找一种获取该字符串的方法。因此,一旦我将完整的文件名作为变量,我就可以做到这一点。【参考方案2】:

我不明白为什么人们使用 for /F ... in ('dir /b ... 来搜索文件,而普通的 for 命令是为此目的而设计的(超过 25 年前):

set "newTestFile="
for %%i in (file_00001_%Yr%%Mth%0%newDate%*.pcap) do set newTestFile=%%i
if defined newTestFile (
   echo file is here: %newTestFile%
) else (
   echo file is not here
)

顺便说一句,您的代码中的错误是 %i FOR 参数必须有双百分号:%%idir 命令必须包含 /b 开关。

【讨论】:

以上是关于将批处理目录输出保存到变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在批处理中输入文字,然后再输出到文本中?

批处理文件命令输出到名称中带有日期和时间的文件中[重复]

为啥将命令输出定向到变量在批处理文件中不起作用

批处理 - 将命令输出存储到变量(多行)

BAT批处理中输出变量换行

如何将多个 findstr 结果分配给单独的变量