根据文件名移动各种文件的工作脚本成功运行。脚本完成后,它将使用以下命令检查两个目录中是否有任何延迟文件 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top