当前位置: 首页 > 知识库问答 >
问题:

如何将字符串格式化为PowerShell脚本中的路径?

陆沈浪
2023-03-14

这个奇怪的小脚本的要点只是让我选择一个目录,并将剪贴板中的任何内容写入该路径中的文本文件。不幸的是,此路径将始终包含括号、方括号,有时还包含大括号。

Y:

Function Get-Folder($initialDirectory="")

{
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")|Out-Null

    $foldername = New-Object System.Windows.Forms.FolderBrowserDialog
    $foldername.Description = "Select a folder"
    $foldername.rootfolder = "MyComputer"
    $foldername.SelectedPath = $initialDirectory

    if($foldername.ShowDialog() -eq "OK")
    {
        $folder += $foldername.SelectedPath
    }
    return $folder
}

$myFolder = Get-Folder('Y:\MyStuff (OtherStuff)')

Get-Clipboard > $myFolder\myFile.txt

由于子文件夹中的括号,我得到了以下错误消息

out-file : Cannot perform operation because the wildcard path Y:\MyStuff
(OtherStuff)\Sub1\Sub2 [Info] [Some More Info]\myFile.txt did not resolve to a file.
At line:22 char:1
+ Get-Clipboard > $myFolder\myFile.txt
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (Y:\Music (MyStu...nfo]\myFile.txt:Stri 
   ng) [Out-File], FileNotFoundException
    + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutF 
   ileCommand

使用 ' 或 \ 来解释转义字符的 -replace 组合数量都不会成功。如何格式化字符串以使其解析为真实目录?

第二个问题有没有办法用更用户友好的文件浏览器对话框来选择路径,而不是不能输入或粘贴路径的文件夹浏览器?

共有2个答案

庾兴发
2023-03-14

这个函数可以回答问题2。它甚至可以让你选择一个zip文件夹中的目录。可选的初始目录和消息。

function Get-Folder {
    Param(
        $initialDirectory = 17,
        $message = "Choose a directory"
    )

    $shell = New-Object -ComObject Shell.Application
    $selection = $shell.browseforfolder(0,$message,65556,$initialDirectory)
    if($selection){$selection.self.path}
}

get-folder 'c:\some\pa(th)'
阎伟志
2023-03-14

遗憾的是,

解决方法是将Out-Filecmdlet-或与文本输入一起使用Set-Contentcmdlet-与-ImagalPath参数一起使用,该参数逐字(逐字)使用其参数:

Get-Clipboard | Out-File -LiteralPath $myFolder\myFile.txt

注意:在 Windows 电源外壳中,“输出文件”“设置内容”使用不同的默认字符编码。在 PowerShell [核心] v6 中,始终使用无 BOM 的 UTF-8 - 请参阅此答案。

若要明确指定所需的编码,请使用< code>-Encoding参数。

[1]注意:在其他cmdlet中,等效参数仅命名为-Path;在PowerShell[Core]v6中,这种不一致得到了纠正,并且Out-File可互换地支持-FilePath-Path

 类似资料:
  • 问题内容: 我有一个名为date的LocalDate变量,当我打印它时显示1988-05-05,我需要将此变量转换为要打印为1988年5月5日。如何执行此操作? 问题答案: 如果他从Java 8中的新功能LocalDate开始,SimpleDateFormat将无法工作。从我所看到的,您将不得不使用DateTimeFormatter,http://docs.oracle.com/javase/8/

  • 我有一个LocalDate变量名为date,当我打印它时,它显示1988-05-05,我需要将它转换成05.may1988。怎么做?

  • 问题内容: 如何在本地时区中将a 格式化为字符串?以下内容将本地语言转换为UTC,而不是我期望的那样。删除对的调用也是如此。我该如何获取当地时间? 注:我们正在使用的旧版本 0.6.3 中的JSR-310参考实现。 问题答案: 在您否决我的答案之前,请注意,问题明确(以粗体显示)是指 JSR-310参考实现的旧版本 0.6.3 !在Java 8和新的日期库问世之前,我在2012年12月问了这个问题

  • 问题内容: 我想用JavaScript格式化价格。我想要一个以a 作为参数并返回如下格式的函数: 最好的方法是什么? 问题答案: 好的,根据您的发言,我正在使用此功能: 我乐于接受改进建议(我不愿意仅仅为了做到这一点就不包括YUI :))我已经知道我应该检测到“”。而不只是将其用作小数点分隔符…

  • 问题内容: 我正在学习将我的应用本地化为简体中文。我正在按照本教程进行操作。 因为本教程基于Obj-C,所以格式化后的字符串可以这样写: “你喜欢?” =“〜Es bueno?〜”; 但是我正在使用Swift。而且在Swift中,我认为您不能用来表示在那里放置了一些东西。我们有字符串插值对吗? 我的应用与数学有关。我想在表格视图单元格的详细标签中显示哪些输入用于计算结果。例如 此处的意思是“根据x

  • 问题内容: 我是Python新手,在格式化对象时遇到问题。 这是我要执行的操作:我有一个对象列表,并且该对象的类的成员之一是对象,它显示事件的持续时间。我想以小时:分钟的格式显示该持续时间。 我尝试了多种方法来执行此操作,但遇到了困难。我当前的方法是为返回小时和分钟的对象添加方法到类中。我可以将除以3600并四舍五入来获得小时数。我在获取剩余秒数并将其转换为分钟时遇到麻烦。 顺便说一下,我正在使用