【问题标题】:System.IO.File Current Directory Use Only TXT FileSystem.IO.File 当前目录仅使用 TXT 文件
【发布时间】:2018-12-12 18:51:45
【问题描述】:

我有一个文件夹位置

Z:\MyFolder\Hours

在这个文件夹中,我有两个文件,一个 PowerShell 脚本和一个文本 (txt) 文件;我只会在这个文件夹中拥有这两个文件,但文本文件名每周都会更改。我的 PowerShell 脚本在下面并且可以工作,但是我希望它执行它以获取它存储(或打开)的当前目录,打开目录中唯一的 txt 文件,然后在其上运行脚本。目前,txt 文件的打开和保存是硬编码的,我想在一些每天更改名称的文件上使用相同的脚本。我感谢任何人的帮助!

    $r = @{
    "Mon" = "Monday";
    "Tue" = "Tuesday";
    "Wed" = "Wednesday";
    "Thu" = "Thursday";
    "Fri" = "Friday";
    "Sat" = "Saturday";
    "Sun" = "Sunday"
}


$regexes = $r.keys | foreach {[System.Text.RegularExpressions.Regex]::Escape($_)}
$regex = [regex]($regexes -join '|')

$callback = { $r[$args[0].Value] }

$file = [System.IO.File]::ReadAllText("Z:\MyFolder\Hours\file.txt")
$file = $regex.Replace($file, $callback)
Set-Content -Path Z:\MyFolder\Hours\file.txt -Value $file

【问题讨论】:

    标签: powershell


    【解决方案1】:

    请参阅我的答案,了解如何获取正在执行脚本的目录。 How can I customize powershell when running inside of the VSCode integrated terminal?

    要获取目录中唯一(或第一个)txt 文件,请执行以下操作:

    $file = Get-ChildItem -Path 'Z:\MyFolder\Hours' -Filter *.txt | Select -First 1 | Select -ExpandProperty FullName
    

    这应该能让你继续前进。

    【讨论】:

      【解决方案2】:

      我用下面显示的解决方案解决了我的问题:

      (Get-Content *.txt) | Foreach-Object {
          $_ -replace 'Mon\b', 'Monday' `
             -replace 'Tue\b', 'Tuesday' `
             -replace 'Wed\b', 'Wednesday' `
             -replace 'Thu\b', 'Thursday' `
             -replace 'Fri\b', 'Friday' `
             -replace 'Sat\b', 'Saturday' `
             -replace 'Sun\b', 'Sunday'
          } | Set-Content *.txt
      

      这允许 PowerShell 脚本在当前目录中打开,打开该目录中唯一的文本 (txt) 文件,进行替换,然后保存文件。

      【讨论】:

      • 我不认为这是一个可行的解决方案,每个 Monday 将扩展为 MonMonday 等。在简短的工作日名称后附加一个 \b 以限制单词边界。跨度>
      • 感谢您的评论。我没有遇到过这种情况,因为当我的脚本运行时,文件只会包含短名称,并且永远不会在同一个文件上运行两次。我确实测试了您的理论,尽管结果略有不同,但确实产生了问题。我不确定我是否会遇到这种情况,但为了万无一失,我按照您的建议进行了编辑。再次感谢您。
      猜你喜欢
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 2019-07-21
      相关资源
      最近更新 更多