你好,我正在尝试编写一个脚本,将近 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!"
)
进一步阅读
- Windows CMD 命令行的 AZ 索引
- Windows CMD 命令的分类列表
- 对于/f- 循环命令以执行另一个命令的结果。
答案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