问题描述
在Get-Proccess之后,我不确定如何推断一部分数据并在命令中使用该数据。
(Get-Process magic)[0].CommandLine
退货
PS C:\WINDOWS\System32> "\\NAS\NAS_Software\Program\Magic.exe" "\\NAS\NAS_Database\TestSubject\"
我想利用结果中给定的(测试主题)目录作为复制项中的路径。
Get-ChildItem -Path "\XXXXXXXXX\" -Include *0.dcm -Recurse | copy-Item -Destination C:\Subjects\New
由于我不是程序员,我希望有人能在我进入错误的对象、字符串等兔子洞之前为我指明正确的方向......
提前致谢。
解决方法
试试下面的代码片段(我使用硬编码 $x
):
$x = '"\\NAS\NAS_Software\Program\Magic.exe" "\\NAS\NAS_Database\TestSubject\"'
# $x = (Get-Process magic)[0].CommandLine
$arg = ($x | ConvertFrom-Csv -Delimiter ' ' -Header prog,arg).arg
$arg ### \\NAS\NAS_Database\TestSubject\
Get-ChildItem -Path "$arg" -Include *0.dcm -Recurse | Copy-Item -Destination C:\Subjects\New
在所描述的特定情况下(路径中没有空格),以下内容也适用:
$arg = $x.split(' ',[StringSplitOptions]::RemoveEmptyEntries)[1].Trim('"')
但是,我更希望 ConvertFrom-Csv
cmdlet 能够正确处理 $x
的任何部分中可能存在的空格。
命令行属性已经是一个字符串(只有 powershell 7 有这个)。这实际上是一个关于如何获取字符串的一部分的问题。我会这样做。 -split
进入第一个单词,然后使用 Split-Path
获取目录,并使用 -replace
双引号不带任何内容。
$commandline = '"\\NAS\NAS_Software\Program\Magic.exe" "\\NAS\NAS_Database\TestSubject\"'
(split-path (-split $commandline)[0] ) -replace '"'
\\NAS\NAS_Software\Program