IF EXIST - 没有扩展名的文件
-
02-01-2020 - |
题
根据文件名移动各种文件的工作脚本成功运行。脚本完成后,它将使用以下命令检查两个目录中是否有任何延迟文件 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%
归零并继续进行下一项检查。如果有 不 文件存在,它将有 %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
谢谢各位的回复,我已经学习了。
解决方案
这是你想找的吗?
dir /b /a-d |find /v "."
其他提示
@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%
块内的内容将被该变量的值替换 在解析块时 - 在块执行之前 - 同样的事情适用于 FOR ... DO (block)
.
因此, IF (something) else (somethingelse)
将使用以下值执行 %variables%
当时的 IF
遇到。
你可能会跳出一个 PUSHD/POPD
括号意味着你的 POPD
不一定会恢复您的起始目录。
(请注意,我使用 u:\
而不是适合我的系统的服务器)
您已经在使用 &&
核实 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