如何读取文件并在文件夹中找到它

问题描述 投票:-2回答:2

我们要求在特定路径中的文件夹中搜索文件。 .csv文件包含文件名列表,我们希望在给定目录中找到这些文件。如果.csv文件中提到的任何文件在搜索路径中丢失,那么它应该抛出错误消息。

我们尝试使用以下脚本,但它不起作用:

set InputFile=C:\Users\336727\Desktop\arun\SearchMCSentry\inputs.csv
:start
for /f "tokens=*" %%A in ('type "%InputFile%"') do ( 
    set "Found=1" 
        for /R %%f in ("%%A") do ( 
    echo ---%%f and Found = %Found%
            if exist %%f  (
            set Found=2
    echo ====%%A and Found = %Found%
            pause
            )
    echo %%A and Found = %Found%
        )
    if %Found%==1 goto :error

    )
    :error
    echo File not found  

你能帮助我们如何实现这个目标吗?

谢谢,帕拉格

windows loops batch-file
2个回答
0
投票

你已陷入delayedexpansion的陷阱。


What is Delayed Expansion

在DOS上运行的旧批处理脚本中,当行运行时,变量会扩展(变为其值)。这意味着,当处理器开始执行for循环时,for循环中的所有变量都会扩展。

Your Case

之前没有设置变量%found%(至少我能看到)。因此,当循环运行时,会发生以下情况:

if ==1 goto :error

How-to fix

启用延迟扩展(让扩展在运行时发生,而不是在短语时间发生)。在循环之前添加此行:

setlocal enableDelayedExpansion

并将%found%更改为!found!,以便处理器了解在运行时扩展它的需要。


0
投票

Alternate Method - CALL SET

如果您不喜欢delayed expansion,可以使用call set来模拟效果。

call set found=1
call echo %%found%%

除了call commandfor之外,这个if技巧可用于所有命令。 CALL REM只能部分工作。

除非绝对必要,否则我建议使用delayed expansionCALL SET比较慢。

© www.soinside.com 2019 - 2024. All rights reserved.