powershell 从函数中排除子文件夹及其父文件夹

35g0bw71  于 2023-03-08  发布在  Shell
关注(0)|答案(1)|浏览(199)

我有一个脚本,它被设计来做三件事:
1.将主"Test"及其所有不同标题的子文件夹中的所有. webp文件转换为. jpg。
1.对于每个目录,在中创建名为"Ch1"的子目录。
1.将所有文件移至"Ch1"文件夹
该脚本目前如下所示,并且适用于只有. webp或. jpg文件的单标题文件夹:

cd D:\TestingGrounds\Test

get-childItem -recurse | Where {$_.extension -eq ".webp"} | rename-item -newname {$_.name  -replace ".webp",".jpg"}

$dirs = Get-ChildItem -force D:\TestingGrounds\Test

foreach ($dir in $dirs) {mkdir D:\TestingGrounds\Test\$dir\ch_1; move D:\TestingGrounds\Test\$dir\* D:\TestingGrounds\Test\$dir\ch_1}

我现在有多章文件夹,已经有子文件夹与. webp和. jpg文件内预先制作的章节文件夹,如"ch1","ch1. 5","ch2"等。我想不出一种方法来添加一个例外或排除到这些多章文件夹,在那里他们没有接触的mkdirmove部分,仅所有. webp文件仍为renamed到. jpg
我对Powershell不是很熟悉,更不用说异常命令了。我试过-notcontains,Where-Object,还有另一个指示符,比如$multi ='Ch *'被忽略。到目前为止,没有任何效果。它将继续在多章节子文件夹中创建一个"Ch1",除了原来的"Ch1",并将它们各自的文件移到其中...基本上是原始脚本所做的。附件是我正在尝试做的事情的照片。1 Before2 Desired Outcome
以下是我的一些尝试:
一个一个一个一个一个x一个一个二个一个x一个一个三个一个x一个一个x一个四个一个

xuo3flqw

xuo3flqw1#

编辑以反映对问题的澄清:
这将获取给定目录中的所有.webp文件,将它们移动到Chapter文件夹(并在需要时创建它),或者如果文件在正确的位置,只需将它们重命名为.jpg。

#Get all WEBP files in the source folder
$sourcefolder = "C:\Test"
$files = Get-ChildItem $sourcefolder -Recurse -Filter *.webp
$chapter = "Ch1"

#Loop through each of the files
Foreach($f in $files)
{

$newname = $f.Name -replace ".webp",".jpg"
$directory = $f.DirectoryName

    #Case insensitive RegEx to see if the file is already in a chapter folder, rename the file.
    if($f.DirectoryName -imatch ".*\\ch\d+")
    {
    Rename-Item $f.FullName -NewName $newname
    }

    #Chapter folder NOT exists, and, File is NOT in chapter folder. Otherwise we'll create sub chapter folders
    If((!(Test-Path "$directory\$chapter")) -and($f.DirectoryName -inotmatch ".*\\ch\d+"))
    {
    New-Item -Path "$directory\$chapter" -ItemType Directory
    }

    #Chapter folder EXISTS and File is NOT in chapter folder. We can now move it where it needs to be
    If((Test-Path "$directory\$chapter") -and ($f.DirectoryName -inotmatch ".*\\ch\d+"))
    {
    Move-Item $f.FullName -Destination "$directory\$chapter\$newname"
    }
}

相关问题