我正在使用一个文本文件,其中包含我要复制到某个$ 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中的条目创建了一个数组,但是遇到了同样的错误。
有什么建议吗?
答案 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($_)
}