执行.ps1脚本时出现Powershell问题

时间:2015-04-23 19:52:59

标签: windows powershell cmd

所以,警告,这可能是一个非常新手的问题,所以提前道歉。

我开始学习Powershell,我想做的第一件事就是创建一个目录&将文件复制到它。

现在,如果我在CMD窗口中使用以下命令,它们可以很好地工作。

mkdir %HOMEPATH%\test

cp test.txt %HOMEPATH%\test

但是,当我将它们放入.ps1文件并执行它时,我收到错误消息,说找不到目录等(见下文)

Copy-Item : Could not find a part of the path 'C:\Chef\windowsdevbox-master\%HOMEPATH%\.berkshelf'

现在,我被告知这是因为我需要在每个命令之前放置CMD。我跑了这个,每个人面前都有CMD,错误消失了,而我却看到了#34; Home文本"对于CMD和脚本完成。

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

但是,未创建文件夹且未复制文件。

我只是想知道我需要做些什么才能让它发挥作用。

2 个答案:

答案 0 :(得分:4)

在PowerShell中mkdir是一个内置函数,旨在模拟相同的功能,但使用内置的cmdlet New-Item来完成基础工作。

cp是PowerShell< {1}} cmdlet的直接别名。

您不需要在Copy-Item之前使用它们来使它们正常工作。

虽然PowerShell不接受环境变量的cmd语法。相反,您将使用特殊的%VAR%变量,后跟冒号$env,后跟变量名称::

$env:HOME

答案 1 :(得分:2)

%HOMEPATH%不是PowerShell变量。

环境变量存储在$env变量范围内。您可以使用$env:homepath访问它。

在这里,我会使用:

mkdir "${env:homepath}\test";
cp test.txt "${env:homepath}\test";

我可能倾向于使用mkdir "${env:homedrive}${env:homepath}\test";,但我真的不知道你想要完成什么。

花括号告诉PowerShell整个内容都是变量名。结肠往往会混淆它,IMX,特别是当你在字符串中嵌入变量时。

环境变量在PowerShell中很特殊。他们有自己的提供者。您可以使用Get-ChildItem env:列出它们,并在env: PSDrive。

处理它们

附加说明:某些配置可能具有不可预测的结果,因为字符串可能包含太多反斜杠或在错误的位置使用反斜杠。在这种情况下,您可能需要使用Join-Path来正确组合路径。

说:

$env:homedrive'U:'
$env:homepath'\' 子文件夹为'\test'

然后"${env:homepath}\test'\\test,看起来像UNC路径。相反,您可以使用Join-Path ${env:homepath} '\test',然后正确创建'\test'

如果你想加入三件事,那就有点复杂了:

Join-Path ${env:homedrive} (Join-Path ${env:homepath} '\test')

但这正确地创建了'U:\test'而不是'U:\\test'

您还可以使用-Resolve选项将相对路径转换为绝对路径。