创建一个脚本,将图片移动到以图片名称命名的文件夹中

创建一个脚本,将图片移动到以图片名称命名的文件夹中

你好,我正在尝试编写一个脚本,将近 3000 张图片移动到文件夹中,我想移动一组图片:

名称示例:3a19gk-0-00-8hqGWOD

该图片的分组为:3a19gk,其余为图片编号。

我成功制作了这个,但它会为每个图片创建文件夹。有没有办法只使用名称的一部分来创建文件夹?

@echo off
setlocal enabledelayedexpansion
set folderpath=D:\path
for %%f in (%folderpath%\*.*) do (
  set "foldername=%%~nf"
  md "!foldername:~0,-3!" >nul 2>&1
  move "%%f" "!foldername:~0,-3!"
) 

答案1

有什么方法可以仅使用名称的一部分来创建文件夹?

您需要第二个(嵌套)for /f来解析名称的第一部分。

类似下面的操作应该可以工作(警告未经测试):

@echo off
setlocal enabledelayedexpansion
set folderpath=D:\path
for %%f in (%folderpath%\*.*) do (
  rem get the folder name up to the first hyphen
  for /f "delims=-" %%g in ("%%f") do (
    set foldername=%%g
    )
  md "!foldername!" >nul 2>&1
  move "%%f" "!foldername!"
  ) 

进一步阅读

答案2

你可以利用命令的选项FOR,这样就只需要使用一个FOR命令。这可以稍微缩短代码。

@echo off
pushd D:\path
for /F "tokens=1* delims=-" %%G in ('dir /a-d /b *.*') do (
    md "%%~G" >nul 2>&1
    move "%%~G-%%~H" "%%~G"
)
popd 

相关内容