从robocopy日志中删除百分比

6

我正在使用一个较旧的版本的robocopy,即使设置了/NJH/NJS参数,日志中仍包含百分比。因此,我想从日志中删除百分比:

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

我已经尝试过

(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

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


尝试使用Where{$_ -match '[\s](\d{1,})(\s+)(\w\W\W.+)' -and $_ -notlike '*%*'}进行编辑:我再看了一遍,那个正则表达式没有意义。你不应该用那个正则表达式得到0%。我甚至在RegEx101上测试过它。 - TheMadTechnician
@TheMadTechnician - 有一天,robocopy会理解一个超过一个字母的PS-Drive名称。那时正则表达式还能工作吗? - lit
那个可行了@TheMadTechnician! - RMK
1个回答

14

/njh/njs与百分比信息无关。您需要在robocopy命令行中添加选项/np来抑制进度输出。

根据文档

/np指定不显示拷贝操作的进度(已复制的文件或目录数)。


编辑:查看了您的实际命令行后,发现/np/mt不兼容。即使存在/np,添加后者参数也会使robocopy显示进度输出。如果不需要运行多线程,建议删除该参数(添加/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

我应该提到,但是/NP参数也被设置了。我提到/njh/njs,因为我在另一篇帖子中看到设置这些参数会抑制百分比。 - RMK
@Moller 如果设置了该参数,您的日志中将不会显示进度输出。我没有编造这个。请展示完整的 robocopy 命令行,并告诉我们可执行文件的(文件)版本号。 - Ansgar Wiechers
我一点也不认为你是这样的。我对PowerShell还很新,所以我肯定在某个地方搞砸了。 这是来自2014年的Win 8.1 robocopy版本,ProductVersion: 6.3.9600.16384 - RMK
那个版本应该完全按照我描述的行为。请展示您完整的命令行。 - Ansgar Wiechers
使用以下代码与变量一起执行 Start-Process'"{0} " "{1} " /LOG:"{2}" /L /NP /NC /BYTES /NJH /NJS /MT /E /MOVE /XD {3} /XC /XN /XO' -f $src, $dest, $logPath, [string]::Join(' ', $excludedFoldersList) - RMK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接