这是我第一次提问,英语不是我的母语,所以请原谅我的错误。
我想用Powershell写一个脚本来移动3个文件夹,但是由于路径中的"[]"和"() "不同,我遇到了一些问题。我不能改变路径,所以我希望你能帮助找到一个解决方案。
我的目标是检查3个文件夹的位置并改变它们的位置。
这是我的代码。
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
if(((Test-Path "D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods\[TMX] IF2 Red Shed") -eq $True ) -and ((Test-Path "D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods\[CP] Immersive Farm 2") -eq $True ) -and ((Test-Path "D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods\[FTM] Immersive Farm 2 Forage+Ore") -eq $True ))
{
Move-Item -Path D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods\[TMX] IF2 Red Shed -Destination D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Map immersive\dossier de changement
Move-Item -Path D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods\[CP] Immersive Farm 2 -Destination D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Map immersive\dossier de changement
Move-Item -Path D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods\[FTM] Immersive Farm 2 Forage+Ore -Destination D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Map immersive\dossier de changement
}
Elseif(((Test-Path "D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Map immersive\dossier de changement\[TMX] IF2 Red Shed") -eq $True ) -and ((Test-Path "D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Map immersive\dossier de changement\[CP] Immersive Farm 2") -eq $True ) -and ((Test-Path "D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Map immersive\dossier de changement\[FTM] Immersive Farm 2 Forage+Ore") -eq $True ))
{
Move-Item -Path D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Map immersive\dossier de changement\[TMX] IF2 Red Shed -Destination D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods
Move-Item -Path D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Map immersive\dossier de changement\[CP] Immersive Farm 2 -Destination D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods
Move-Item -Path D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Map immersive\dossier de changement\[FTM] Immersive Farm 2 Forage+Ore -Destination D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods
}
Else
{
$oReturn=[System.Windows.Forms.Messagebox]::Show("No folders")
}
-LiteralPath
而是当你使用 -Path
的 ItemChildItem 提供者 cmdlets,PowerShell 会将参数视为潜在的通配符模式!因为,PowerShell 会将该参数视为潜在的通配符模式。
因为 [A-Z]
是一个通配符模式结构,文件系统globber实际上不会解析带有字面意思的文件。[
或 ]
的名称中。
使用 -LiteralPath
将抑制任何试图扩展通配符的行为。
Test-Path -LiteralPath "D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods\[TMX] IF2 Red Shed"
记得用空格引用路径!
Move-Item -LiteralPath 'C:\path with [wildcards]\in\the\name.ext' -Destination 'C:\Destination\path\'
我通过标签完成发现,你可以用反引号转义方括号。
test-path '.\a`[hi`]\'
move-item '.\a`[hi`]\' foo
set-location '.\a`[hi`]\'