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

时间:2017-12-27 08:49:27

标签: windows loops batch-file

我们要求在特定路径中的文件夹中搜索文件。 .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  

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

谢谢, Parag

2 个答案:

答案 0 :(得分:0)

你陷入了delayedexpansion的陷阱。

什么是延迟扩展

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

您的案例

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

if ==1 goto :error

如何修复

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

setlocal enableDelayedExpansion

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

答案 1 :(得分:0)

替代方法 - CALL SET

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

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

call command技巧适用于除forif之外的所有命令。 CALL REM仅部分有效。

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