从robocopy日志中删除百分比

RMK*_*RMK 2 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
Run Code Online (Sandbox Code Playgroud)

但这导致

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

所以我去除了100%,但没有去除0%。

Ans*_*ers 6

/njh/njs百分比信息无关。您需要通过将选项添加/nprobocopy命令行来抑制进度输出。

文档中

/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
Run Code Online (Sandbox Code Playgroud)

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

(Get-Content $logpath) | Where-Object {
    $_ -notmatch '^\s*\d{1,3}%\s*$'
} | Set-Content $logpath
Run Code Online (Sandbox Code Playgroud)