我正在从事 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' 作为行计数器。请参阅这篇脚本专家文章更多细节。