一点背景......我经常使用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执行我想要的操作并定位我需要使用的文件夹?
答案 0 :(得分:1)
第一:接受环境
因为我确定我可以使用%appdata%来引用文件夹所取的位置
PowerShell的语法错误,环境变量的%var%
语法特定于cmd脚本(并从MS-DOS批处理文件继承)。
在PowerShell中,访问环境变量的名称前缀为env:
,因此$env:AppData
。
$_dirget = "$env:AppData\$_fldertxt"
第二:传递参数
不要在变量中包含参数名称,传递给cmdlet的变量将作为参数而不是参数名称传递。你需要:
get-content -LiteralPath $_dirget
(有一些调用“splat”允许你使用参数名称 - 参数对的哈希表作为哈希表,但这里没有必要。)