gpt4 book ai didi

powershell - 切换两个文件的名称

转载 作者:行者123 更新时间:2023-12-02 23:58:32 25 4
gpt4 key购买 nike

我正在使用脚本来更改计算机的登录背景。我已经完成了我需要做的所有事情,但是我试图使脚本更高效,因为就目前而言,选择了一个新脚本之后,我创建的一个名为OrderNames的函数将所有内容重命名为random,然后重命名它们是background1、2、3,依此类推。这是我正在使用的代码段:

Function OrderNames #Renames everything to a format better than random numbers
{
$FileNames = GCI $BGPath -exclude $BGOld
$FileNames | ForEach-Object -process { Rename-Item $_ -NewName "$Get-Random).jpg" }
$OrderNames = GCI $BGPath -exclude $BGOld
$OrderNames | ForEach-Object -begin { $count = 1 } -process
{ Rename-Item $_ -NewName "background$count.jpg"; $count++ }
}

$Path = "C:\Windows\System32\oobe\info\backgrounds"
$BGOld = GCI $BGPath "backgrounddefault.jpg" #Store current background name
$BGFiles = GCI $BGPath -exclude $BGOld #Get all other images
$BGNew = $BGFiles[(get-random -max ($BGFiles.count)] #Select new image
Rename-Item $BGOld.FullName "$(Get-Random)-$($_.Name).jpg"
Rename-Item $BGNew.FullName "backgrounddefault.jpg"
OrderNames

可以正常工作,但我希望能够简单地切换 $BGOld$BGNew的名称。回到大学时,我可以创建一个临时变量,将BGNew存储到它,使BGNew等于BGOld,然后使BGOld等于温度。但是,当我使用BGOld的值创建一个临时变量时,它不起作用。实际上,变量似乎没有通过重命名函数更改,并且将一个变量设置为等于另一个变量会导致

Cannot rename because item at does not exist.



很好,所以我尝试使用 Select basename将文件名仅设置为变量,但出现错误

cannot index into an object of type system.io.fileinfo.



另外,我尝试了 $BGOld.FullName = $BGNew.FullName,并尝试使用 Rename-Item和其他一些我现在不记得的方法。

我试图复制项目名称,但这也不起作用。我希望这不是我忽略的事情。

TL; DR
是否可以将文件的名称复制到temp变量中,以便在重命名文件时可以将temp变量的名称复制回“旧”文件中,以避免重命名?甚至更好,我可以只切换文件名吗?

最佳答案

是的,您可以在PowerShell中执行类似的操作。为此的“算法”基本上与您为C描述的相同:

  • 将旧名称重命名为临时
  • 将新名称重命名为旧
  • 将旧名称重命名为新的

  • 因此,我们需要跟踪的唯一信息是旧名称和新名称+临时文件名。
    # Grab the current background and pick the new one
    $BGPath = "C:\Windows\System32\oobe\info\backgrounds"
    $CurrentBG = Get-Item (Join-Path $BGPath -ChildPath 'backgrounddefault.jpg')
    $NewBG = Get-ChildItem $BGPath -Filter *.jpg -Exclude $CurrentBG.Name |Get-Random
    # Store the current name of the new background in a variable
    $NewBGName = $NewBG.Name

    # Now comes the swap operation
    # 1. Rename old file to something completely random, but keep a reference to it with -PassThru
    $OldBG = $CurrentBG |Rename-Item -NewName $([System.IO.Path]::GetRandomFileName()) -PassThru

    # 2. Rename new file to proper name
    $NewBG |Rename-Item -NewName 'backgrounddefault.jpg'

    # 3. And finally rename the old background back to the name previously used by the new background
    $OldBG |Rename-Item -NewName $NewBGName

    关于powershell - 切换两个文件的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36365505/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com