Windows 执行.ps1脚本时出现Powershell问题
所以,警告,这可能是一个真正的新手问题,所以提前道歉 我开始学习Powershell,我想做的第一件事就是创建一个目录并将文件复制到其中 现在,如果我在CMD窗口中使用以下命令,它们将非常有效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
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.
但是,没有创建文件夹,也没有复制文件
我只是想知道我需要做些什么才能让它工作。在PowerShellmkdir
中是一个内置函数,旨在模拟相同的功能,但使用内置cmdletNew 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变量。首先,感谢您的解释,它非常合理,我将在继续时使用它。”。其次,这两个命令都非常有效。再次感谢您的回答:)。我也试过这个,只是为了学习,而且效果也不错。