- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个循环,该循环将遍历指定目录中的一组文本文件以搜索字符串。根据是否找到字符串来报告结果。但是%errorlevel%
始终返回 0 并计算为 0。
SETLOCAL enabledelayedexpansion
FOR %%G IN (*.txt) DO (
find /i "My text string" "%%G"
ECHO %date% %time% : errorlevel is %errorlevel% >> %report_dir%\%computername%.txt
IF %errorlevel% EQU 1 (
ECHO %date% %time% : String found >> %report_dir%\%computername%.txt
GOTO:copy_log
)
)
ENDLOCAL
SETLOCAL enabledelayedexpansion
FOR %%G IN (*.txt) DO (
find /i "My text string" "%%G"
IF %errorlevel% (
ECHO %date% %time% : String found >> %report_dir%\%computername%.txt
GOTO:copy_log
)
)
ENDLOCAL
最佳答案
%ERRORLEVEL%
扩张太快了。您可以使用以下方法完全避免该问题:
IF ERRORLEVEL 1
SET /?
中对“延迟环境变量扩展”的解释。帮助文字:
Finally, support for delayed environment variable expansion has been added. This support is always disabled by default, but may be enabled/disabled via the
/V
command line switch to CMD.EXE. SeeCMD /?
Delayed environment variable expansion is useful for getting around the limitations of the current expansion which happens when a line of text is read, not when it is executed. The following example demonstrates the problem with immediate variable expansion:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "%VAR%" == "after" @echo If you see this, it worked
)would never display the message, since the
%VAR%
in BOTH IF statements is substituted when the first IF statement is read, since it logically includes the body of the IF, which is a compound statement. So the IF inside the compound statement is really comparing "before" with "after" which will never be equal. Similarly, the following example will not work as expected:set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%in that it will NOT build up a list of files in the current directory, but instead will just set the LIST variable to the last file found. Again, this is because the %LIST% is expanded just once when the FOR statement is read, and at that time the LIST variable is empty. So the actual FOR loop we are executing is:
for %i in (*) do set LIST= %i
which just keeps setting LIST to the last file found.
Delayed environment variable expansion allows you to use a different character (the exclamation mark) to expand environment variables at execution time. If delayed variable expansion is enabled, the above examples could be written as follows to work as intended:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)Again, this is because the %LIST% is expanded just once when the FOR statement is read, and at that time the LIST variable is empty. So the actual FOR loop we are executing is:
for %i in (*) do set LIST= %i
which just keeps setting LIST to the last file found.
Delayed environment variable expansion allows you to use a different character (the exclamation mark) to expand environment variables at execution time. If delayed variable expansion is enabled, the above examples could be written as follows to work as intended:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
关于batch-file - 批处理 %errorlevel% 在 FOR 循环中返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7139025/
登录Desktop Rstudio后,会出现以下消息: Error in yaml.load(readLines(con), error.label = error.label, ...) : o
在 cmd.exe 中运行 MS DOS 命令后,我使用 echo %ERRORLEVEL% 检查退出代码。不过我想在运行这个之前我应该清除变量:%ERRORLEVEL%。 我说得对吗?另外如何清
我想读取Java中cmd命令的返回码。为此,我使用了: Runtime.exec("echo %errorlevel%") 但不是回显错误代码,而是回显 %errorlevel%。 最佳答案 不知道你
我有一个嵌套的批处理脚本,我希望它的错误代码渗透到调用它的主批处理脚本。我试过了 exit /b %errorlevel% 但是变量没有返回。调用的批处理脚本中的 ECHO'ing %errorlev
我正在尝试以下命令并希望退出我的process(%ERRORLEVEL%)。但它返回 previous(last) 执行 sample.exe 的退出代码结果。我想获取当前命令的退出代码。我的要求是在
在启动 Jmeter 时,出现以下错误: VM 初始化期间发生错误无法为对象堆保留足够的空间 errorlevel=1。 请帮我解决这个问题。我使用的是 4GB RAM、64 位操作系统、intel
我正在学习 Windows 批处理脚本。当复制、移动或删除操作失败时,我需要提出错误。我制作了一个示例脚本,由于某种原因,当操作失败时,我无法让 ERRORLEVEL 上升。我运行脚本,文件不存在或在
我正在使用 Windows 批处理文件比较来自 2 个文件夹的文件列表。它打印结果,无论是通过还是失败。 当前工作批处理文件: for /F "tokens=*" %%f in (list.txt)
刚刚用 %ERRORLEVEL% 偶然发现了一件奇怪的事情并想看看是否有人知道原因以及是否有办法解决它。本质上,似乎在 if 语句中执行的命令没有设置 %ERRORLEVEL%多变的。 ERRORLE
由于 ERRORLEVEL 是一个环境变量,所以在我有机会在我的批处理文件中检查它之前,是否可以更改它的值? 最佳答案 环境变量属于当前“进程”,因此无法从外部更改它们。如果您在批处理文件中的相关命令
我试图找到一种方法来查看主机是否在 Windows 的 C 中处于事件状态,因此我使用 ping 命令运行系统,然后运行系统检查 %ERRORLEVEL% 但它始终显示 0,即使主机无法访问也是如此.
在命令提示符下,试试这个: powershell aaa echo ErrorLevel is %errorlevel% Powershell 将失败(出现错误)。您还会看到“ErrorLevel i
假设我们想使用以下命令在 Windows 中创建一个空文件: type nul > C:\does\not\exist\file.txt 目录不存在,所以报错: The system cannot f
我有一个为 C# 项目运行一些命令的构建后事件。最后一个命令有时会导致 ERRORLEVEL 值不等于零,然后构建失败。 我想附加一行额外的命令以始终将 ERRORLEVEL 值设置为零。最方便的方法
我的 Windows 机器桌面上有一个最小的批处理脚本,它使用 FC.exe 工具,用于比较我桌面上的两个文本文件。 我要比较的文件 file1.txt 包含一个字符 a file2.txt 包含一个
我想使用“wmic”命令来确定特定的 java 进程是否仍在运行。 例如> wmic 进程,其中“commandLine like '%ACTMonitor%' and executablePath
我试图从作为 QProcess 运行的 Windows 命令行应用程序中捕获特定的错误代码。 我今天有一个错误,应用程序失败: 在命令行上运行时: echo %errorleve% 返回 14001
我们有一个程序偶尔会崩溃。客户从计划任务运行程序。当程序以特定参数运行时,程序作为接口(interface)引擎运行,创建一个文件,然后将该文件ftp'到另一个服务器以供另一个程序导入。 我想知道我是
Windows shell 有一个 %ERRORLEVEL% 变量,可用于查找已通过 shell 运行的进程的退出代码。因此,我可以在 .bat 文件中使用它来获取我从 .bat 文件中调用的外部脚本
我想知道是否可以从 Ant build xml 中的批处理文件获取返回值。 我的批处理文件返回 %ERRORLEVEL% 值(在我的情况下,批处理文件返回 2)。我想知道是否可以捕获此问题并在 Ant
我是一名优秀的程序员,十分优秀!