Windows下批量创建文件夹

提取当前文件夹下所有文件的姓名前缀,创建以姓名为名称的文件夹,并将该文件放入文件夹中

其中文件名为:姓名+短横线+其他

先给出所有的代码:

# 遍历所有以姓名为前缀的文件,并创建相应的文件夹,并将文件移动到对应的文件夹中
Get-ChildItem | Where-Object {$_.Name -match "^[\w\s]+-.*\..+$"} | ForEach-Object {
    # 从文件名中提取出姓名和扩展名
    $name = [regex]::Match([System.IO.Path]::GetFileNameWithoutExtension($_.Name), "^[\w\s]+").Value.Trim()
    $extension = [System.IO.Path]::GetExtension($_.Name)

    # 创建相应的文件夹
    if (!(Test-Path $name)) {
        New-Item -ItemType Directory -Name $name
    }

    # 判断文件名前缀是否与文件夹名称相同,若相同则将文件移动到对应的文件夹中
    if ($_.Name.StartsWith("$name-")) {
        Move-Item $_.FullName "$name\$($_.Name)"
    }
}

Write-Host "Done."

以下是 PowerShell 脚本的详细解释:

遍历文件

Get-ChildItem | Where-Object {$_.Name -match "^[\w\s]+-.*\..+$"} | ForEach-Object {
    #...
}

这段代码使用 Get-ChildItem 命令获取当前目录下的所有文件,然后使用 Where-Object 条件过滤器,筛选出文件名以姓名为前缀的文件。这里使用的正则表达式 ^[\w\s]+-.*\..+$ 匹配文件名,表示以一个或多个字母、数字或空格开头,紧接着一个短横线,然后是任意字符直到文件扩展名为止。

随后使用 ForEach-Object 命令对满足条件的文件进行处理。

提取姓名和扩展名

$name = [regex]::Match([System.IO.Path]::GetFileNameWithoutExtension($_.Name), "^[\w\s]+").Value.Trim()
$extension = [System.IO.Path]::GetExtension($_.Name)

这段代码从文件名中提取出姓名和扩展名,用于之后创建文件夹和移动文件。

  • GetFileNameWithoutExtension($_.Name) 获取文件名(不包含扩展名)
  • [regex]::Match(…, "^[\w\s]+").Value.Trim() 提取姓名部分,使用的是正则表达式 ^[\w\s]+,匹配一个或多个字母、数字或空格,表示姓名部分。同时使用 Trim() 方法删除姓名前后的空格。
  • GetExtension($_.Name) 获取文件的扩展名,如 .txt.pdf 等。

创建文件夹

if (!(Test-Path $name)) {
    New-Item -ItemType Directory -Name $name
}

这段代码使用 Test-Path 命令判断当前目录下是否已经存在以该姓名为名称的文件夹,若不存在则使用 New-Item 创建新的文件夹。需要注意的是,在 PowerShell 脚本中,如果要创建新的文件夹,需要使用 -ItemType Directory 选项。

移动文件

if ($_.Name.StartsWith("$name-")) {
    Move-Item $_.FullName "$name\$($_.Name)"
}

这段代码判断文件名前缀是否与文件夹名称相同,如果相同,则使用 Move-Item 命令将文件移动到对应的文件夹中,并将文件名中的前缀一起放入文件夹。需要注意的是,这里使用了 $_.FullName 来获取文件的完整路径,以便于使用 Move-Item 命令移动文件,同时使用 $($_.Name) 的方式在文件名中插入姓名前缀。

最后,整个脚本的输出为 Done.,表示处理完成。

将其保存为.ps1的文件,在powershell中运行:

./xxx.ps1

记得以管理员身份打开powershell!!
如果系统阻止运行ps脚本,那就设置一下:

Set-ExecutionPolicy Unrestricted

就酱紫。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值