繁体   English   中英

执行.ps1脚本时的Powershell问题

[英]Powershell issue when executing .ps1 script

因此,警告一下,这可能是一个真正的新手问题,因此提前致歉。

我开始学习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前面,错误消失了,取而代之的是,我看到了CMD的“主页文本”,并且脚本完成了。

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

但是,没有创建文件夹,也没有复制文件。

我只是想知道要使它正常工作需要做什么。

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

cp是PowerShell的Copy-Item cmdlet的直接别名。

您无需在这些cmd之前加上cmd即可使它们起作用。

但是,PowerShell不接受环境变量的%VAR%语法。 取而代之的是,您将使用特殊的$env变量,然后使用冒号:然后使用变量名称: $env:HOME

mkdir $env:HOMEPATH\test

cp test.txt $env:HOMEPATH\test

%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选项将相对路径转换为绝对路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM