我有一个文件夹,每天在其中创建多个屏幕截图 ' [projectname].[date].[time].png
'
所以它看起来像这样:
ProjectAlpha.2020-11-10.09-53-21.png
ProjectAlpha.2021-05-20.15-10-43.png
ProjectBeta.2020-11-10.09-53-28.png
ProjectBeta.2021-05-20.15-11-24.png
ProjectBeta.2021-07-27.11-34-42.png
ProjectDelta.2021-05-20.15-19-01.png
ProjectDelta.2021-05-20.15-09-42.png
ProjectDelta.2021-07-27.11-35-03.png
我希望第一个“点”之前的部分作为文件夹名称,然后所有内容移动到其相应的文件夹中。
因此结果将会是这样的:
├── ProjectAlpha
│ ├── ProjectAlpha.2020-11-10.09-53-21.png
│ └── ProjectAlpha.2021-05-20.15-10-43.png
└── ProjectBeta
│ ├── ProjectBeta.2020-11-10.09-53-28.png
│ ├── ProjectBeta.2021-05-20.15-11-24.png
│ └── ProjectBeta.2021-07-27.11-34-42.png
└── ProjectDelta
├── ProjectDelta.2021-05-20.15-19-01.png
└── ProjectDelta.2021-05-20.15-09-42.png
我发现类似的东西这个 Powershell发布和这个CMD发布,但我无法让它适应我的情况。
有谁能帮我解决这个问题吗?
答案1
类似这样的操作,将这段代码粘贴到记事本中,然后以您想要的名称保存,但扩展名为 *.bat。接下来,将项目所在的文件夹(图像)拖放到批处理文件中...
@echo off
:: Please drag and drop the folder where the projects are to this batch script
if exist "%~1" (if not exist "%~1\" exit) else (exit)
set "Folder=%~1"
Set Files=*.jpg *.png *.gif *.webp
pushd "%Folder%"
for /f "delims=" %%a in ('dir /b /a-d /on %Files%') do for /f "delims=." %%b in ("%%~a") do (
if not exist "%%b" md "%%b"
move "%%a" "%%b"
)
exit
答案2
使用 Powershell,尝试以下操作:
$mypath = Get-Location
$files = Get-ChildItem
$files | Where { $_ -match "project[a-z]+"} |
ForEach {
if ( !( Test-Path -Path $Matches[0] )) {
New-Item -Path $Matches[0] -ItemType Directory
}
$files = $Matches[0] + "*.*"
Move-Item -Path $files -Destination $Matches[0]
}