所以,警告,这可能是一个非常新手的问题,所以提前道歉。
我开始学习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.
但是,未创建文件夹且未复制文件。
我只是想知道我需要做些什么才能让它发挥作用。
答案 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
选项将相对路径转换为绝对路径。