将批处理目录输出保存到变量
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 参数必须有双百分号:%%i
和 dir
命令必须包含 /b
开关。
【讨论】:
以上是关于将批处理目录输出保存到变量的主要内容,如果未能解决你的问题,请参考以下文章