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

Windows 执行.ps1脚本时出现Powershell问题,windows,powershell,cmd,Windows,Powershell,Cmd,所以,警告,这可能是一个真正的新手问题,所以提前道歉 我开始学习Powershell,我想做的第一件事就是创建一个目录并将文件复制到其中 现在,如果我在CMD窗口中使用以下命令,它们将非常有效 mkdir %HOMEPATH%\test cp test.txt %HOMEPATH%\test 然而,当我将它们放入一个.ps1文件并执行它时,我得到一个错误,说找不到目录等(见下文) 复制项目:找不到路径“C:\Chef\windowsdevbox主目录\%HOMEPATH%\.Berkshel

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

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

现在,如果我在CMD窗口中使用以下命令,它们将非常有效

mkdir %HOMEPATH%\test

cp test.txt %HOMEPATH%\test
然而,当我将它们放入一个.ps1文件并执行它时,我得到一个错误,说找不到目录等(见下文)

复制项目:找不到路径“C:\Chef\windowsdevbox主目录\%HOMEPATH%\.Berkshellf”的一部分

现在,我被告知这是因为我需要将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
,就可以使它们正常工作

不过,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整个内容都是变量名。冒号往往会混淆它,尤其是在字符串中嵌入变量时

环境变量在PowerShell中是特殊的。他们有自己的供应商。您可以使用
Get ChildItem env:
列出它们,并在
env:
PSDrive中操作它们


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

说:

$env:homedrive
'U:'

$env:homepath
'\'

子文件夹是
'\test'

然后,
“${env:homepath}\test'
\\test
,它看起来像一个UNC路径。相反,您可以使用
连接路径${env:homepath}'\test'
,然后正确创建
'\test'

如果要连接三件事,则有点复杂:

Join-Path ${env:homedrive} (Join-Path ${env:homepath} '\test')
但这正确地创建了
'U:\test'
,而不是
'U:\\test'


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

使用powershell变量(而不是cmd.exe变量)。请参阅powershell中
get childitem变量的输出:
。那么您是指使用诸如“New Item”之类的变量,还是指使用诸如“$fso.CreateFolder”之类的变量“?我指的是
$HOME
而不是
%HOMEPATH%
(虽然我认为它们并不完全相同)等。示例命令的问题是
%VAR%
不是powershell变量。首先,感谢您的解释,它非常合理,我将在继续时使用它。”。其次,这两个命令都非常有效。再次感谢您的回答:)。我也试过这个,只是为了学习,而且效果也不错。