簡體   English   中英

執行.ps1腳本時的Powershell問題

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM