2012-02-21 35 views
0

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

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

$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识别与使用运行实用程序时使用的命令相同的命令。由于我确定我可以使用%appdata%来引用我要从哪里获取文件夹的位置,我怎么能不写这个脚本来做我想要的?我可以使用绝对路径,因为我必须为所有三台计算机使用单独的脚本。而我不想。

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

+0

作为一般性评论,您的变量命名在PowerShell的世界中令人困惑。像$ _dirget这样的变量看起来很奇怪,因为很多cmdlet都提供了一个特殊变量$ _,这意味着“当前正在管道中的对象”。因此你可能会看到类似于:get-process | foreach-object {$ _。PM/1KB} ...鉴于此,命名$ _PM将是一个坏主意。 – 2012-02-21 17:46:41

+0

我会改变我的语法练习。感谢您的高举。 – 2012-02-21 18:41:41

回答

1

第一:Accerss环境

因为我敢肯定,我可以使用%APPDATA%引用我想要的文件夹从拿太

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

在PowerShell中访问环境变量的前缀名为env:,所以$env:AppData

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

二:将参数传递

不要在变量包括参数名称,传递给cmdlet的一个变量将作为参数不参数名称进行传递。您需要:

get-content -LiteralPath $_dirget 

(也有一些是呼叫“图示”,使您可以使用参数名称参数对的哈希表的哈希表,但这是不必要在这里)

+0

实际上,使用$ env变量的环境变量是完全可扩展的,没有将它们包含在子表达式中,这应该工作:“$ env:AppData \ $ _ fldertxt” – 2012-02-21 15:22:07

+0

@ShayLevy所以它确实......我想知道我在哪里得到它在我脑海中想到需要一个子表达式?将更新答案。 – Richard 2012-02-21 15:54:07

+0

我想我可能需要这样做,但我不确定如何。我会试试看看它是如何发展的。谢谢你的帮助。 – 2012-02-21 17:03:22