Я хочу удалить информацию о ведущем пути, используя -replace.

robocopy.exe C:\FOLDER\Data2 C:\FOLDER\Data2 /l /nocopy /is /e /fp /ns /nc /njh /njs  /log:c:\temp\FolderList.txt

Мой вывод:

C:\FOLDER\Data2\
C:\FOLDER\Data2\Documents\
        C:\FOLDER\Data2\Documents\1.txt
        C:\FOLDER\Data2\Documents\2.txt
        C:\FOLDER\Data2\Documents\3.txt
        C:\FOLDER\Data2\Documents\4.txt
        C:\FOLDER\Data2\Documents\5.txt
C:\FOLDER\Data2\Documents\TEST\
        C:\FOLDER\Data2\Documents\TEST\5.txt

Мой желаемый результат:

    Documents\
            Documents\1.txt
            Documents\2.txt
            Documents\3.txt
            Documents\4.txt
            Documents\5.txt
    Documents\TEST\
            Documents\TEST\5.txt
0
Arbelac 26 Апр 2020 в 16:24
"Вывод": stdout или в лог-файл?
 – 
stackprotector
26 Апр 2020 в 16:35
Я хочу отобразить «Выходной файл».
 – 
Arbelac
26 Апр 2020 в 16:43
Возможно, это может быть вам полезно: stackoverflow.com/a/21209726/3677139
 – 
sodawillow
26 Апр 2020 в 16:44
Я, наверное, недостаточно ясно выразился. Строки ниже «Мой вывод:». Выводятся ли они на терминал (таким образом записываются в stdout) или они являются содержимым вашего файла журнала c:\temp\FolderList.txt?
 – 
stackprotector
26 Апр 2020 в 16:47
Не терминал. они являются содержанием моего файла журнала
 – 
Arbelac
26 Апр 2020 в 17:10

1 ответ

Если ваш вывод является содержимым вашего файла журнала:

$path = 'C:\FOLDER\Data2\'
$pattern = [regex]::Escape($path)
$newContent = @()
Get-Content -Path "c:\temp\FolderList.txt" | ForEach-Object {$newContent += $_ -replace $pattern, ''}
Set-Content -Path "c:\temp\FolderList.txt" -Value $newContent

Если ваш вывод записывается на терминал, вы можете перенаправить вывод robocopy в файл, прочитать его и заменить каждое вхождение вашего нежелательного пути пустой строкой:

$path = 'C:\FOLDER\Data2\'
$tempFile = New-TemporaryFile
Start-Process robocopy.exe -ArgumentList "`"$path`" `"$path`" /l /nocopy /is /e /fp /ns /nc /njh /njs  /log:c:\temp\FolderList.txt" -Wait -RedirectStandardOutput ($tempFile.FullName)

$pattern = [regex]::Escape($path)
Get-Content -Path ($tempFile.FullName) | ForEach-Object {Write-Host "$($_ -replace $pattern, '')"}

Remove-Item -Path ($tempFile.FullName)
0
stackprotector 26 Апр 2020 в 17:22