从robocopy日志中删除百分比

时间:2017-07-12 23:41:23

标签: powershell robocopy

即使已设置robocopy/NJH参数,我也会使用旧版/NJS,其中包含日志中的百分比。所以我想从日志中删除百分比:

            72880735    H:\1.txt
100%  
            33038490    H:\10.txt
100%  
            64878348    H:\2.txt
100%  
            25875810    H:\3.txt
  0%  
100%  

我已经尝试了

(Get-Content $logfile) | Where-Object {
    $_ -match '[\s](\d{1,})(\s+)(\w\W\W.+)'
} | Set-Content $logfile

但结果是

            72880735    H:\1.txt
            33038490    H:\10.txt 
            64878348    H:\2.txt
            25875810    H:\3.txt
  0%  

所以我被剥夺了100%,但不是0%。

1 个答案:

答案 0 :(得分:4)

/njh/njs与百分比信息无关。您需要通过向/np命令行添加选项robocopy来取消进度输出。

来自documentation

  

/np指定不显示复制操作的进度(到目前为止复制的文件或目录的数量)。

修改:在查看实际的命令行后,/np似乎与/mt不兼容。即使robocopy存在,添加后一参数也会使/np显示进度输出。如果您不需要运行多线程,我将删除该参数(添加/ndl以防止目录出现在输出中)。

我还建议使用splatting而不是将参数列表放在一个字符串中:

$params = $src, $dest, ('/LOG:"{0}"' -f $logpath), '/L', '/NP', '/NC', '/BYTES',
          '/NJH', '/NJS', '/NDL', '/E', '/MOVE', '/XC', '/XN', '/XO', '/XD',
          $excludedFoldersList

& robocopy @params

如果由于某种原因你必须使用多线程,你应该能够在完成后从日志中删除进度信息,如下所示:

(Get-Content $logpath) | Where-Object {
    $_ -notmatch '^\s*\d{1,3}%\s*$'
} | Set-Content $logpath
相关问题