【问题标题】:Comparing output to string将输出与字符串进行比较
【发布时间】:2015-09-22 04:38:27
【问题描述】:

在这里需要更多帮助,我距离完成我的脚本还有一点点路要走,但似乎无法弄清楚最后一部分。

背景:

我需要将命令输出\\%%A\%B 与预设的“排除列表”进行比较,以比较该进程是否已经在不同的脚本上运行。 我有一个文件存储复制错误的文件位置的日志。解析此日志文件,并将所有文件位置(即时)存储到%%A%%B。排除列表说明了哪些文件已根据已知问题手动复制。此脚本需要跳过这些文件并复制其余文件。

要求:

我需要将 %%A\%%B 的结果与 \root\path 进行比较,看看字符串是否匹配(在文件之前)。如果是,那么我需要标记它。

代码:

这是我目前所拥有的:

cd C:\logs
for /f "tokens=2* delims=\" %%A in (err.log) do (
    if not \\%%A\%%B==%BACKUPDIR% (
        if not \\%%A\%%B==%TEMPLATEPATH%\* (        
            for %%I in %PSTNAMES% do (
                if not "\\%%A\%%B"=="%NASDIR%\%%I PST\"* (
                    echo %NASDIR%\%%I PST\*
                    @echo \\%%A\%%B
                ) else (
                    echo false
                )
            )
        )
    )

这应该让您了解需要发生的事情 我也在尝试适应比较代码:

If NOT "%somepath%"=="%somepath:some_exclusion=%" (
    echo continue
) else (
    echo don't continue
)

额外:

现在,如果我只有可以使用的路径,那么第一组代码就可以工作,但是因为它包含文件名,所以比较不匹配。 因此,要让这项工作发挥作用,我想有两种途径。

  1. 尝试获取"%somepath%"=="%somepath:some_exclusion=%"working
  2. 尝试去掉文件名

我遇到的问题是:

  1. %somepath% 不起作用,因为我似乎无法将 %%A 存储为像 %var% 这样的变量
  2. 我似乎无法在文件名之前停止路径名。

请帮忙

【问题讨论】:

  • 您是否尝试在if 中使用通配符?
  • if not \\%%A\%%B==%BACKUPDIR% 之前添加echo if not \\%%A\%%B==%BACKUPDIR%,在if not \\%%A\%%B==%TEMPLATEPATH%\* 之前添加echo if not \\%%A\%%B==%TEMPLATEPATH%\* 等等,看看有什么问题...== 调用简单的文本comarison,没有可能的通配符
  • 我只是举个例子,因为我需要找到 \\share\path\anything 匹配 \\share\path\

标签: windows loops batch-file cmd


【解决方案1】:

如果您尝试在if 中使用通配符:这将不起作用。

但不是

if mouse==mouse*

你可以使用

echo mousetail | find "mouse" && echo yes || echo no

(仅显示基本原理;findstr 有一些有用的功能,例如“字符串开头”:findstr "^mouse" - seefindstr /?` 了解更多信息)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-20
    • 2022-11-22
    • 2012-10-06
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多