[英]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.