Commandline.todirectory? System.Diagnostics.Commandline 对象到字符串?多变的?

问题描述

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