我们要求在特定路径中的文件夹中搜索文件。 .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
答案 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
技巧适用于除for
,if
之外的所有命令。 CALL REM
仅部分有效。
除非绝对必要,否则我建议使用delayed expansion
。 CALL SET
速度较慢。