基于文件名移动各种文件的工作脚本成功运行。脚本完成后,它将使用IF EXIST *.txt
检查两个目录中是否存在任何延迟文件。这很好用,除了我注意到一些没有扩展名的文件。这些不是以前的问题,因为由于我无法控制的过程而无法帮助我,我需要修改我的脚本。
我唯一的想法是以下代码。承担因为有两个条件:
:check1
PUSHD "\\UNC\path1" &&(
DIR /A-D *.
IF %errorlevel% NEQ 0 GOTO check2
) & POPD
:add1
ECHO Add note to the log file
:check2
PUSHD "\\UNC\path2" &&(
DIR /A-D *.
IF %errorlevel% NEQ 0 GOTO laststep
) & POPD
:add2
ECHO Add note to the log file
:laststep
Some other code before exiting
这应该在路径上运行DIR
,如果没有扩展名的文件存在,则%errorlevel%
为零,然后继续进行下一次检查。如果存在 no 文件,则%errorlevel%
不会为零(可能为1),并且会在下次检查之前将一些文本附加到日志中。检查两个会做同样的事。
这似乎非常复杂,我无法找到像IF EXIST
一样简单的“单线”解决方案。我意识到我可以使用*.
,但也会返回目录,并可能导致%errorlevel%
不正确。
更新代码
在我通常设置变量的地方,我也SET
运行DIR
的两个路径。通过这种方式,它们可以更容易地在其他地方使用和我绕过了我通常得到的UNC路径错误 - 我不知道原因。更新的文件检查仅用于没有扩展名的文件:
DIR %p1% /b /a-d|FIND /v "." && ECHO Found 1 >> %log%
DIR %p2% /b /a-d|FIND /v "." && ECHO Found 2 >> %log%
FINDSTR /I "Found" %log%
IF %errorlevel% EQU 0 GOTO stillthere
:nofiles
Some code
GOTO domore
:stillthere
Some code
:domore
Other code before exit
感谢您的回复,我从中学到了这一点。
答案 0 :(得分:4)
这是你想要找到的吗?
dir /b /a-d |find /v "."
答案 1 :(得分:1)
@ECHO OFF
SETLOCAL
:check1
PUSHD "u:\path1"
DIR /A-D *. >NUL 2>NUL
IF %errorlevel% EQU 0 ECHO Add note \path1 to the log file
POPD
PUSHD "u:\path2"
DIR /A-D *. >NUL 2>NUL
IF %errorlevel% EQU 0 ECHO Add note \path2 to the log file
POPD
:laststep
:: Some other code before exiting
GOTO :EOF
您的问题包括:
在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。块中的任何%var%
将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于{{1 }}
因此,FOR ... DO (block)
将在遇到IF (something) else (somethingelse)
时使用%variables%
的值执行。
并且您可能跳出IF
括号,这意味着您的PUSHD/POPD
无法恢复您的起始目录。
(请注意,我使用POPD
而不是服务器来适应我的系统)
答案 2 :(得分:0)
您已使用&&
来验证PUSHD
是否有效。您可以对DIR /-D
执行相同的操作。我发现它让生活更轻松。此外,如果找不到*.
,您可能希望隐藏任何错误消息,尤其是因为这是预期的情况。我还隐藏了可能找到的任何文件的显示,但你当然可以摆脱重定向。如果PUSHD失败,您可能还想隐藏错误消息,但我没有实现。
PUSHD "\\UNC\path1" && (
DIR /A-D *. 1>nul 2>nul && ECHO Add note to the log file
POPD
)
PUSHD "\\UNC\path2" && (
DIR /A-D *. 1>nul 2>nul && ECHO Add note to the log file
POPD
)
ECHO Some other code before exiting