Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 将变量设置为“的结果”;查找“;批处理文件_Batch File_Find - Fatal编程技术网

Batch file 将变量设置为“的结果”;查找“;批处理文件

Batch file 将变量设置为“的结果”;查找“;批处理文件,batch-file,find,Batch File,Find,我想根据文件中包含给定字符串的行数设置一个变量 比如: set isComplete = 0 %isComplete% = find /c /i "Transfer Complete" "C:\ftp.LOG" IF %isComplete% > 0 ECHO "Success" ELSE ECHO "Failure" 或: 显然,这两种选择都不起作用 谢谢。从命令行 for /f "tokens=3" %f in ('find /c /i "Transfer Complete" "C:

我想根据文件中包含给定字符串的行数设置一个变量

比如:

set isComplete = 0
%isComplete% = find /c /i "Transfer Complete" "C:\ftp.LOG"
IF %isComplete% > 0 ECHO "Success" ELSE ECHO "Failure"
或:

显然,这两种选择都不起作用

谢谢。

从命令行

for /f "tokens=3" %f in ('find /c /i "Transfer Complete" "C:\ftp.LOG"') do set isComplete=%f 
从批处理脚本

for /f "tokens=3" %%f in ('find /c /i "Transfer Complete" "C:\ftp.LOG"') do set isComplete=%%f 

您不需要使用
for
命令
find
将根据结果将
ERRORLEVEL
设置为以下值之一:

  • 0,至少找到一个匹配项
  • 1,未找到匹配项
  • 2或更多,发生错误
由于看起来您只是想查看传输是否完成,而不是字符串出现的总次数,因此可以执行以下操作:

@echo OFF

@find /c /i "Transfer Complete" "C:\test path\ftp.LOG" > NUL
if %ERRORLEVEL% EQU 0 (
    @echo Success
) else (
    @echo Failure
)

这太棒了。但是,我应该提到,我需要这个来处理有空间的路径。这些引语似乎没有什么帮助。啊。所以对于/f“tokens=3”%%f in('find/c/i“Transfer Complete”“c:\test path\ftp.LOG“'),请将isComplete设置为%%f将isComplete设置为“path\ftp.LOG:”,我猜错误是由空格引起的。您需要使用for命令的“usebackq”选项,以便可以在路径周围加引号:for/f“usebackq tokens=3”%%f in(
find/c/i)“传输完成”C:\test path\ftp.log“
)确实设置了isComplete%%事实上,我现在期望计数为2(传输了两个文件)…因此两次出现“传输完成”=成功。如果%isComplete%>0,则
有点混乱;这是您真正想要的
如果%isComplete%eq 2
@echo OFF

@find /c /i "Transfer Complete" "C:\test path\ftp.LOG" > NUL
if %ERRORLEVEL% EQU 0 (
    @echo Success
) else (
    @echo Failure
)