PowerShell:目录检索和语法错误

时间:2012-02-21 10:59:40

标签: windows powershell

一点背景......我经常使用Windows XP,Vista和7。因此,我经常不得不将我的程序设置从每台PC上的%appdata%文件夹移动到下一个。我认为制作一个PowerShell脚本为我做这个并在我完成后删除文件夹将是缓解我的麻烦。由于我通常在闪存驱动器上工作,我希望使用相对路径,但它似乎给我带来了一些麻烦,但最大的问题是我似乎并不了解Powershell足以知道什么是错误我正在制作以及如何解决它...所以我来到这里。

我想我可以将任务分成两个脚本;一个用于放置目录,另一个用于将它们复制回原始文件夹并删除它们后面的任何痕迹。我会告诉你我到目前为止。我认为检索它们可能会更困难所以我从那里开始。这是我到目前为止所拥有的。我正在使用txt文件,以便更新我想要或需要传输的文件夹列表,因此它也是变量的目标。

$fldrtxt = Get-Content .\FolderList.txt
$dirget = -LiteralPath ="'%appdata%'\$_fldertxt"
$dirpost = "./Current"
# get-command | Add-Content .\"$today"_CommandList.txt
Set-Location c: {get-content $_dirget} | %{ copy-item $_dirpost}

我无法让PowerShell识别我在使用run实用程序时使用的相同命令。因为我确定我可以使用%appdata%来引用我想要从哪里取文件夹,我怎么能不写这个脚本来做我想要的呢?我可以使用绝对路径,因为我必须为所有三台计算机使用单独的脚本。我不想要。

如何使用PowerShell执行我想要的操作并定位我需要使用的文件夹?

1 个答案:

答案 0 :(得分:1)

第一:接受环境

  

因为我确定我可以使用%appdata%来引用文件夹所取的位置

PowerShell的语法错误,环境变量的%var%语法特定于cmd脚本(并从MS-DOS批处理文件继承)。

在PowerShell中,访问环境变量的名称前缀为env:,因此$env:AppData

$_dirget = "$env:AppData\$_fldertxt"

第二:传递参数

不要在变量中包含参数名称,传递给cmdlet的变量将作为参数而不是参数名称传递。你需要:

get-content -LiteralPath $_dirget

(有一些调用“splat”允许你使用参数名称 - 参数对的哈希表作为哈希表,但这里没有必要。)