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