在 wsl 中使用 powershell 复制路径中带有空格的文件?

在 wsl 中使用 powershell 复制路径中带有空格的文件?

设想

我在使用 powershell 命令 wsl 从包含空格的路径复制文件时遇到了一些困难。我也没有找到这个特定案例的示例。因此我想知道:

问题

如何使用 powershell 复制 wsl 中路径中包含空格或空格的文件?

答案1

解决方案

其本质如下:

  1. 空格不需要用反引号 ` 进行转义
  2. 带空格的路径需要用引号 " 引起来,并且需要用反斜杠 \ 进行转义
  3. 整个字符串需要用单引号 ' 括起来

最小工作示例

MWE 是一个名为的 powershell 脚本exampleCopyCommand.ps1,它将文件复制someFile.txt到 wsl 中:

[String] $copy = 'sudo cp \"/mnt/c/path with a space in it/subFolder/Taskwarrior-installation/AutoInstallTaskwarrior/src/main/resources/autoinstalltaskwarrior/someFile.txt\" /home/testlinuxname/maintenance/gCal/' #WORKING
Write-Output "CurrentPathCopyCommand="$copy
#wsl $copy # not working
$output = bash -c $copy # working
Write-Host $output

参数化示例

由带有空格的路径组成的变量字符串的示例是:

[String] $linuxCurrentPath ="/mnt/c/path with a space in it/subFolder/Taskwarrior-installation/AutoInstallTaskwarrior"
[String] $getLinuxUsername ="testlinuxname"
[String] $getMaintenanceFolderName="maintenance"
[String] $getGCalSyncFolderName="gCal"

[String] $copy = 'sudo cp \"'+$linuxCurrentPath+'/src/main/resources/autoinstalltaskwarrior/askSync.sh\" /home/'+$getLinuxUsername+"/"+$getMaintenanceFolderName+"/"+$getGCalSyncFolderName+"/"


Write-Output "CurrentPathCopyCommand="$copy
#wsl $copy # not working
$output = bash -c $copy # working
Write-Host $output

笔记

^ 此处的需求并非回答问题时必须满足的绝对要求,而是此特定解决方案中必须满足的要求。我可以想象还有其他解决方案不需要满足这些需求。

相关内容