【发布时间】:2017-11-16 22:36:17
【问题描述】:
我有不同的文件,我想使用批处理检查其中的任何更改。这就是我所拥有的:
@echo off
setlocal enableDelayedExpansion
set "list=test.txt test1.txt"
:loop
timeout -t 1 >nul
for %%j in (%list%) do (
REM Here only prints test.txt
echo %%j
for %%i in (%%j) do echo %%~ai|find "a">nul || goto :loop
echo file was changed %%j
attrib -a %%j
)
goto :loop
如果我只使用一个文件,则可以,但不能使用两个或更多。这个想法是,echo file was changed %%j 只输出正确的文件,而不是两者。
有什么想法吗?
编辑:
如果我做一些改变:
@echo off
title LAN chat reader
setlocal enableDelayedExpansion
set "list=test.txt test1.txt"
:loop
timeout -t 1 >nul
for %%j in (%list%) do (
echo %%j
echo %%~aj|find "a">nul || goto :loop
echo file was changed %%j
attrib -a %%j
)
goto :loop
有效,但仅在我对第一个文件进行更改后提醒我第二个文件中的更改。我可以理解问题出在循环中,所以我很困惑。
【问题讨论】:
-
一旦您跳出循环,您将无法处理其他文件。为什么找不到属性就跳出循环?
-
只是为了测试,还是不行
-
另外,您的 find 命令将始终为 false,因为您正在寻找小写字母 a。使用
/I开关和FIND命令或大写字母。 -
我建议几件事。 #1:使用 'call :CheckFile "%%j"' 而不是嵌套的 for 循环 - 使事情更容易阅读。 #2:您可以使用 DIR 更直接地检查属性: dir /aa %%j > nul 2>&1 && attrib -a %%j
-
您甚至不需要第二个
FOR命令。你可以使用echo %%~aj|find "A">nul
标签: windows batch-file for-loop command-line cmd