【问题标题】:Windows batch script to compare two csv files [closed]用于比较两个 csv 文件的 Windows 批处理脚本[关闭]
【发布时间】:2022-12-14 07:23:32
【问题描述】:

第一个 csv 文件包含主机名列表。第二个 csv 文件包含主机名和日志。我想使用批处理文件比较主机名列表是否存在于第二个 csv 文件中。

我正在使用 fc 命令处理批处理文件,但还没有得到我想要的结果。

我需要跳过第二个文件 (Logging.csv) 中的前两行。我怎样才能做到这一点?

【问题讨论】:

  • findstr.exe 应该是你命令的基础,而不是 fc.exe。请打开命令提示符窗口,输入findstr /?,然后按[ENTER]键,了解如何使用它。

标签: windows csv batch-file compare


【解决方案1】:
for /f %e in (file1) do findstr "%e" file2 >nul&if errorlevel 1 (echo %e>>missing) else (echo %e>>found)

作为提示符下的命令。如果作为批处理行运行,请将每个 %e 更改为 %%e。

[未经测试]

【讨论】:

  • 这些似乎很管用!我们有我们需要忽略的顶部选项卡,因此我添加了一些代码以使其也能正常工作。 for /f skip^=1^ usebackq^ delims^=^ eol^= %%e in (hostname.csv)
  • 文件 1 的第一行?如果是这样,请在/f 之后添加` "skip=1" `
【解决方案2】:

我不知道你的文件结构,但我希望这个 PowerShell 脚本能有所帮助:

foreach($line in Get-Content .Hosts.csv) {
    if(Get-Content .Logs.csv | Select-String $line){
        echo "The host $line exists!"
    }
    else{
        echo "The host $line doesn't exist."
    }
}

其中“Hosts.csv”是您的主机列表, “Logs.csv”是一个包含主机及其每行日志的文件。

【讨论】:

  • 没有 [powershell] 标签,也没有暗示 OP 希望使用它的解决方案。因此,如果您想在仅使用 [batch-file] 标签时使用 powershell.exe 提交答案,请提交从批处理文件运行的解决方案。请注意,默认情况下,powershell 脚本并未设计为在 Windows 中运行,因此您的答案至少应满足这一点,(当你Edit你的答案使用-File超过-Command).
  • 我们需要使用批处理文件。第一个 csv 文件包含一个带有主机名的选项卡。第二个 csv 文件包含两个选项卡。第一个选项卡是主机名,第二个选项卡是日志/系统日志。我们需要检测第一个 csv 文件中的所有主机名是否都在第二个 csv 文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 2013-11-04
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多