我正在尝试捕获并清理powershell-WhatIf
中文件重命名操作的参数输出。目标是删除输出的某些部分,但即使经过多次尝试,我还是无法让它工作。以下是我尝试过的方法:
Set-Location "C:\Path\To\Directory"
$Replace1 = 'Item: C:\Path\To\Directory\'
$Replace2 = 'What if: Performing the operation `"Rename File`" on target'
$Replace3 = 'Destination: C:\Path\To\Directory\'
$VarIvExp = "GCI -Path . -Filter *.pdf | Ren -New { `$_.Name -replace ' ', '_' -replace '-', '_' } -Whatif ;"
# Various attempts to capture and replace parts of the output:
Invoke-Expression $VarIvExp | % { ($_ 3>&1).Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'') }
Invoke-Expression $VarIvExp.ToString() | % { ($_ 3>&1).Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'') }
Invoke-Expression $VarIvExp 3>&1 | % { $_.ToString().Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'') }
Invoke-Expression $VarIvExp.ToString() | % { ($_.ToString() 3>&1).Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'') }
Invoke-Expression $VarIvExp.ToString() | % { $_ | out-string -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
Invoke-Expression $VarIvExp | % { $_.ToString() | -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
Invoke-Expression $VarIvExp 3>&1 | % { $_ | out-string -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
Invoke-Expression $VarIvExp.ToString() | % { $_ | -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
Invoke-Expression $VarIvExp | % { $_.ToString() | -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
- 输出:
What if: Performing the operation "Rename File" on target "Item: C:\Path\To\Directory\SomeText I nº 001-SMSCBMRJ-20250222.pdf" Destination: C:\Path\To\Directory\SomeText__I_nº_001_SMSCBMRJ_20250222.pdf
What if: Performing the operation "Rename File" on target "Item: C:\Path\To\Directory\SomeText I nº 002-SMSCBMRJ-20250222.pdf" Destination: C:\Path\To\Directory\SomeText__I_nº_002_SMSCBMRJ_20250222.pdf
What if: Performing the operation "Rename File" on target "Item: C:\Path\To\Directory\SomeText II nº 001-SMSCBMRJ-20250222.pdf" Destination: C:\Path\To\Directory\SomeText_II_nº_001_SMSCBMRJ_20250222.pdf
What if: Performing the operation "Rename File" on target "Item: C:\Path\To\Directory\SomeText II nº 002-SMSCBMRJ-20250222.pdf" Destination: C:\Path\To\Directory\SomeText_II_nº_002_SMSCBMRJ_20250222.pdf
注意:我还尝试过直接在 上进行各种操作$Results
,但没有成功。以下是使用 进行的尝试$Results
...$Results.Replace('various attempts','')
Set-Location "C:\Path\To\Directory"
$Replace1 = 'Item: C:\Path\To\Directory\'
$Replace2 = 'What if: Performing the operation `"Rename File`" on target'
$Replace3 = 'Destination: C:\Path\To\Directory\'
$VarIvExp = "GCI -Path . -Filter *.pdf | Ren -New { `$_.Name -replace ' ', '_' -replace '-', '_' } -Whatif ;"
$Results = Invoke-Expression $VarIvExp
$Results = Invoke-Expression $VarIvExp.Replace( -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'')
$Results.ToString().Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'')
- 期望/预期输出:
SomeText I nº 001-SMSCBMRJ-20250222.pdf SomeText__I_nº_001_SMSCBMRJ_20250222.pdf
SomeText I nº 002-SMSCBMRJ-20250222.pdf SomeText__I_nº_002_SMSCBMRJ_20250222.pdf
SomeText II nº 001-SMSCBMRJ-20250222.pdf SomeText_II_nº_001_SMSCBMRJ_20250222.pdf
SomeText II nº 002-SMSCBMRJ-20250222.pdf SomeText_II_nº_002_SMSCBMRJ_20250222.pdf