编写PowerShell/Bat脚本按文件名最后下划线后内容归档文件
PowerShell 实现脚本
# 遍历当前目录下的所有文件(排除子目录) Get-ChildItem -File | ForEach-Object { # 获取文件名(不含扩展名) $baseName = $_.BaseName # 按下划线分割文件名,取最后一段作为目标文件夹名 $folderName = $baseName.Split('_')[-1] # 拼接目标文件夹路径 $targetFolder = Join-Path -Path $_.DirectoryName -ChildPath $folderName # 如果文件夹不存在则创建 if (-not (Test-Path -Path $targetFolder)) { New-Item -ItemType Directory -Path $targetFolder | Out-Null } # 移动文件到目标文件夹(-Force可覆盖同名文件,不需要可删除) Move-Item -Path $_.FullName -Destination $targetFolder -Force }
使用说明
- 先打开PowerShell,切换到要处理文件的目录,再运行这段脚本
- 脚本会自动提取每个文件名最后一个下划线后的内容,以此创建文件夹并移动对应文件
- 建议先测试:把
Move-Item换成Write-Output "$($_.FullName) -> $targetFolder",确认移动路径无误后再执行移动操作
Batch 实现脚本
@echo off setlocal enabledelayedexpansion :: 遍历当前目录下的所有文件 for %%f in (*.*) do ( :: 跳过脚本自身,避免被移动 if "%%~nf" == "%~n0" goto skip :: 获取文件名(不含扩展名) set "filename=%%~nf" set "foldername=" :: 循环截取,提取最后一个下划线后的内容 :loop if not "!filename!" == "" ( for /f "delims=_ tokens=1*" %%a in ("!filename!") do ( set "foldername=%%b" set "filename=%%b" ) goto loop ) :: 仅处理有下划线的文件,避免创建空文件夹 if not "!foldername!" == "" ( :: 文件夹不存在则创建 if not exist "!foldername!" mkdir "!foldername!" :: 移动文件到目标文件夹(>nul隐藏移动提示,不需要可删除) move "%%f" "!foldername!\" >nul ) :skip ) echo 文件归类完成 pause
使用说明
- 把这段代码保存成
.bat格式的文件,放到要处理的文件目录里双击运行即可 - 脚本会自动跳过自身,不会把脚本文件也移走
- 如果文件名里没有下划线,脚本会跳过该文件,不会创建空文件夹
内容的提问来源于stack exchange,提问作者Marius
相关产品推荐
相关产品推荐

