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

我正在处理ETL作业,我们使用下面的命令从文件夹中获取文件名,并且还会计算每个文件的行数。

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

现在,我想要在Windows命令相同的function,并不知道如何做到这一点。

任何帮助将不胜感激。

你需要做的第一件事就是用于计算行的工具“wc” – 它在textutils包中,可以在这里findhttp://gnuwin32.sourceforge.net/packages.html

我build议你把它转换成一个dosbatch file – 你不需要在开始时执行一个shell(/ usr / bin / ksh位),所有你需要做的就是在正确的文件上调用wc -l,并将输出发送到原来的位置。

怀疑最好的方法是从头开始,在命令行上玩wc,习惯它,然后build立自己的命令。 看起来你会使用更多的批处理脚本,所以即时通讯不打算在这里教你:)

我会给你半个答案:

 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 

这就是这一切。 所有你需要做的是find一个Windows相当于:

  • 更改目录
  • 统计一行文件的数量
  • 在某处写输出

如果你正在运行最新版本的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”作为行计数器。 有关更多详细信息,请参阅此脚本专家文章 。