尝试将 Unix 命令转换为 Windows 命令

尝试将 Unix 命令转换为 Windows 命令

我正在从事 ETL 作业,我们使用以下命令从文件夹中获取文件名,它还将计算每个文件的行数。

exec( '/usr/bin/ksh', '-c "cd [$PFileDir];/usr/bin/wc -l [$PFileName] > [$PFileDir]/ETL_FILE_LIST"',2);

现在,我想要在 Windows 命令中获得相同的功能,但不确定如何去做。

任何帮助都将受到高度赞赏。

答案1

您首先需要的是用于计算行数的工具“wc” - 它位于 textutils 包中,可以在此处找到 http://gnuwin32.sourceforge.net/packages.html

我建议您将其转换为 dos 批处理文件 - 您不需要在开始时执行 shell(/usr/bin/ksh 位),您需要做的就是在正确的文件上调用 wc -l,然后将输出发送到它原来的位置。

我觉得最好的方法是从头开始,在命令行上使用 wc,习惯它,然后构建自己的命令。看起来你会使用更多的批处理脚本,所以我不打算在这里教你 :)

答案2

我会给你一半的答案:

exec( '/usr/bin/ksh', '-c "cd [$PFileDir];/usr/bin/wc -l [$PFileName] >  [$PFileDir]/ETL_FILE_LIST"',2);
^^^^^^^^^^^^^^^^^^^    ^   ^^^^^^^^^^^^^^^    ^^^^^^^^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^^^^^^^^^
  launch a shell       |   change directory   count the number of lines    write it to $PFileDir/ETL_FILE_LIST
                   run a command              in $PFileName

这就是它的全部功能。您需要做的就是找到与以下 Windows 等效的版本:

  • 更改目录
  • 计算一行中的文件数量
  • 将输出写入某处

答案3

如果您正在运行最新版本的 Windows,那么应该内置有 PowerShell。您应该能够通过以下方式获得您想要的内容:

ls $PFileDir -Recurse -File | %{"{0} {1}" -f $_.Name, ((Get-Content $_.FullName | Measure-Object).Count)} >> (Join-Path $PFileDir 'ETL_FILE_LIst')

关键是使用 Measure-Object 代替 'wc' 作为行计数器。请参阅这篇脚本专家文章更多细节。

相关内容