将批处理dir输出保存到变量

时间:2015-06-11 14:53:38

标签: batch-file

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

到目前为止,这是行不通的。

    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
    )

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

2 个答案:

答案 0 :(得分:0)

肯定你需要延迟扩展,你需要使用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
)

答案 1 :(得分:0)

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

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
)

BTW您的代码中的错误是%i FOR参数必须有双百分号:%%idir命令必须包含/b切换。