Powershell将文本连接到变量

时间:2012-11-13 22:05:10

标签: powershell

我的源文件都驻留在一个文件夹中,该文件夹的路径包含在名为$template的变量中。 我需要指定确切的文件名,因为每个文件都会转到不同的目的地。

我的目标是仅将文件名连接到变量。

示例:

$template = "D:\source\templatefiles\"

Filename1是:“graphic-183.jpg”

我试过了:

Join-Path $template graphic-183.jpg

在cli发布这个似乎可以做我想要的。

但是现在,除了为每个文件创建一个新变量之外,如何引用这个连接文件路径?它并不像通过列表那样简单地依赖于确定文件所在位置的文件名。

我正在玩弄其他情况,否则如果,但肯定不是这么难。

最重要的是,我只想在文件夹路径前添加每个文件名并对目标进行硬编码,因为每次运行脚本时它始终都是相同的。


修改

我刚刚编辑了这篇文章,因为我忘了提及我是如何使用它的。

在我的脚本中,我打算使用以下行:

Copy-Item -Path $template filename.ext -Destination $destfolder

上面突出显示的部分是我尝试将$template加入文件名。

感谢您的任何建议。

- = Bruce D. Meyer

2 个答案:

答案 0 :(得分:3)

也许这就是你想要的?

您可以使用括号调用cmdlet,如下所示:

Copy-Item -Path (Join-Path $template filename.ext) -Destination $destfolder

这会导致PowerShell从“参数模式”变为“表达式模式” - 即,它将Join-Path cmdlet的输出作为表达式返回。

是的,大卫和安斯加的建议也很有帮助 - 试试这个只能获得完整路径:

(get-childitem $template) | select fullname

答案 1 :(得分:1)

您可以像这样构建路径:

$template = "D:\source\templatefiles\"
Copy-Item -Path "${template}filename.ext" ...

但是,我认为大卫的建议可能是解决问题的更好方法。您可以使用哈希表将文件名映射到目标文件夹,并执行以下操作:

$locations = @{
  "foo" = "C:\some",
  "bar" = "C:\other",
  ...
}

Get-ChildItem $template | % { Copy-Item $_ $location[$_.Name] }