小编jon*_*n Z的帖子

路径中括号的奇怪行为

当路径中有方括号时,PowerShell会出现奇怪的行为.例如,如果您在文件夹中:

C:\Some Movie [2011]
Run Code Online (Sandbox Code Playgroud)

其中包含一个mkv文件并键入:

ls *.mkv
Run Code Online (Sandbox Code Playgroud)

什么都没有回来!我认为问题在于PowerShell尝试执行以下操作:

Get-ChildItem 'C:\Some Movie [2011]\*.mkv'
Run Code Online (Sandbox Code Playgroud)

因为[2011]被认为是通配符而失败.我能够mkv使用以下命令从这样的文件夹中检索所有内容:

Get-ChildItem -LiteralPath 'C:\Some Movie [2011]' -Include *.mkv
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在Rename-Item命令中提供这些结果时,它会失败.

Get-ChildItem -LiteralPath 'C:\Some Movie [2011]' -Include *.mkv | Rename-Item -NewName "movie.mkv"
Run Code Online (Sandbox Code Playgroud)

没有括号的文件夹中的相同操作运行没有问题.有任何想法吗?

powershell path

11
推荐指数
1
解决办法
4697
查看次数

在传递给 Powershell 的参数中转义 %

我有一个 MSBuild 脚本,它启动 PowerShell 以在远程计算机上执行一些工作,因此您必须传递密码才能创建远程会话,但存在问题 - 如果密码包含 % 字符,则解析错误 - % 丢失(例如:pass%word -> 密码,'%' -> ''(无))。

如果我在 PowerShell 脚本中创建变量 $password = "pass%word" 它工作正常。我知道 % 是 PowerShell 中的 foreach,所以我尝试使用 ` - 但它没有帮助。我也可以更改密码,但这不是一个选项(目前)。

那么我该如何解决这个问题呢?

MSBuild 部分

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Test">
<Target Name="Test">
        <!-- %25 - it's code for %-->
        <Exec Command="powershell &quot;&amp; {. 'C:\test.ps1';Test -password '`%25'}&quot;" />
    </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

测试.ps1

Function Test {
    param (
        [string]$password = $(throw "Please specify password")
    )

    Write-Host $password
}
Run Code Online (Sandbox Code Playgroud)

msbuild powershell

5
推荐指数
1
解决办法
4571
查看次数

标签 统计

powershell ×2

msbuild ×1

path ×1