Powershell Copy-Item Foreach来自文本文件,包含文件夹路径和环境变量

时间:2018-02-20 20:20:36

标签: powershell foreach

我正在使用一个文本文件,其中包含我要复制到某个$ destination的文件和文件夹路径列表。我试图让powershell将每一行解释为copy-item的文件路径。以下是我正在使用的内容:

$cfglist = Get-Content "${cfgPath}\ProgramConfigsList.txt"
    Foreach($item in $cfglist){
    #Copy-Item -Path $item -Destination $dst -Force -Recurse -Container:$true -Passthru -Whatif
}

ProgramConfigsList.txt如下所示:

"$env:programfiles\Tracker Software\PDF Editor\Dictionaries"
"${env:ProgramFiles(x86)}\Notepad++\plugins"
"$env:userprofile\AppData\Local\ATI"

等等。

我收到此错误:Copy-Item:找不到驱动器。名为“$ env”的驱动器不存在。

在文本文件中,我尝试过使用引号,不使用引号,并使用`取消注释“:”。在PS脚本中,我有$ item,“$ item”,“$ {item}”和$ {item}。我还尝试使用相同的copy-item命令将$ cfglist变量传递给foreach-object脚本块。我尝试使用'get-childitem'的变体,但这似乎不适用于需要解释为文件/文件夹路径的文本文件中的条目。我还从ps1脚本中的ProgramConfigsList.txt中的条目创建了一个数组,但是遇到了同样的错误。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您需要删除包含的引号,然后手动展开变量:

$cfglist = Get-Content "${cfgPath}\ProgramConfigsList.txt" |ForEach-Object {
    $ExecutionContext.InvokeCommand.ExpandString($_.Trim("`"'"))
}

答案 1 :(得分:0)

或者:在输入文件中使用%variablename%语法并使用[Environment]::ExpandEnvironmentVariables静态方法。例如:

Get-Content "$cfgPath\ProgramConfigsList.txt" | ForEach-Object {
  [Environment]::ExpandEnvironmentVariables($_)
}