win bat命令 在此目录下,搜索名字第一个“-”前面字符一样的,并以此名字创建一个文件夹。把这些文件移动到此文件夹

win bat命令在此目录下,搜索名字第一个“-”前面字符一样的,并以此名字创建一个文件夹。把这些文件移动到此文件夹

举列:
1文件夹目录下有

雷克萨斯-1-1080p.mp4
雷克萨斯-1-1080p.txt
雷克萨斯-1-1080p.jpg
雷克萨斯-2-1080p.mp4
雷克萨斯-2-1080p.mp3
雷克萨斯-2-1080p.nfc
贝吉塔-1-2k.w
贝吉塔-1-2k.s
贝吉塔-1-2k.a
贝吉塔-4-2k.f
贝吉塔-4-2k.k
贝吉塔-4-2k.g

执行代码后
在1文件夹下有

雷克萨斯(此文件夹下有以下文件)
雷克萨斯-1-1080p.mp4
雷克萨斯-1-1080p.txt
雷克萨斯-1-1080p.jpg
雷克萨斯-2-1080p.mp4
雷克萨斯-2-1080p.mp3
雷克萨斯-2-1080p.nfc

贝吉塔(此文件夹下有以下文件)
贝吉塔-1-2k.w
贝吉塔-1-2k.s
贝吉塔-1-2k.a
贝吉塔-4-2k.f
贝吉塔-4-2k.k
贝吉塔-4-2k.g


@echo off
setlocal enabledelayedexpansion

rem 设置要搜索的文件名前缀
set "search_prefix=-"

rem 获取当前目录路径
for %%A in (.) do set "current_dir=%%~nxA"

rem 创建以搜索字符为名的文件夹
for /f "delims=" %%F in ('dir /b /a-d "%search_prefix%*.*"') do (
  set "file=%%~nxF"
  for /f "tokens=1 delims=%search_prefix%" %%P in ("!file!") do (
    set "folder_name=%%P"
    if not exist "!folder_name!" (
      mkdir "!folder_name!"
    )
    move "%%F" "!folder_name!\"
  )
)

rem 显示操作完成消息
echo 文件整理完成!
pause

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:
    @echo off
    setlocal enabledelayedexpansion
    
    for %%i in (*) do (
        set "filename=%%i"
        set "foldername=!filename:~0,-13!"
        if not exist "!foldername!" (
            mkdir "!foldername!"
        )
        move "%%i" "!foldername!"
    )
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^