String 使用Powershell从路径中选择用户名并附加到文件名

String 使用Powershell从路径中选择用户名并附加到文件名,string,powershell,String,Powershell,我试图从我们系统上的每个用户帐户中获取一个特定的日志文件。文件对于每个人都位于相同的路径中,并且具有相同的名称。当前的脚本只是在文件末尾添加了一个数字,但我被告知知道每个文件属于谁将有助于下一阶段的故障排除。这就是我开始奋斗的地方 我尝试使用初始的Get Childitem返回目录(在本例中为UNC),然后通过管道将其输出到Out string将其输出到字符串。然后我希望使用replace删除用户名两侧的文本,并将其附加到文件名中。不过,这似乎根本不起作用 所有目录都有相同的路径: \\file

我试图从我们系统上的每个用户帐户中获取一个特定的日志文件。文件对于每个人都位于相同的路径中,并且具有相同的名称。当前的脚本只是在文件末尾添加了一个数字,但我被告知知道每个文件属于谁将有助于下一阶段的故障排除。这就是我开始奋斗的地方

我尝试使用初始的
Get Childitem
返回目录(在本例中为UNC),然后通过管道将其输出到
Out string
将其输出到字符串。然后我希望使用replace删除用户名两侧的文本,并将其附加到文件名中。不过,这似乎根本不起作用

所有目录都有相同的路径:

\\files\users\[USERNAME]\TEMP\generic.log
我想知道我是否像平常一样,把这里的步骤复杂化了?基本上,我需要从目录路径中修剪
\\files\user\
\temp\
,只保留用户名作为变量,以便添加到copy命令中。我尝试使用
-replace
时,告诉我使用的是无效的正则表达式

迄今为止的守则:

$file = Get-ChildItem -Path \\files\users\talexander\TEMP\ -Recurse -Force -Include generic.log | Select-Object Directory | Out-String  
$file -replace "\\xfiles\users\", ""
这是尝试让替换工作正常的第一步,但是,唉,它失败了。感谢您的任何想法。

此正则表达式有助于:

"\\files\users\talexander\TEMP\" -replace '(?:\\\\files\\users\\)(.*)(?:\\TEMP\\)', '$1'
泰利山德

或使用拆分:

("\\files\users\talexander\TEMP\" -split '\\')[4]

在这种情况下,有几种简单的方法可以做到这一点

如果您的路径为

\\files\users\[USERNAME]\TEMP\generic.log
那么它应该很容易使用和更换:

$path.Replace("[USERNAME]","UserName")
由于路径是已知的,您也可以轻松地执行以下操作:

$rootPath = \\files\users\
$UserSubPath = "$UserName\TEMP\generic.log"

Copy-Item "$rootPath$UserSubPath", "C:\MyRepository\"

真是太棒了,真是魅力四射。我猜它使用“\”作为分隔符,然后将in之间的字符串绑定到一个数组?Split方法?是的!很乐意帮忙。