Board logo

标题: [文件操作] [已解决]求一个能够按名称自动创建文件夹的bat [打印本页]

作者: a475012621    时间: 2022-5-16 14:43     标题: [已解决]求一个能够按名称自动创建文件夹的bat

本帖最后由 a475012621 于 2022-5-16 16:18 编辑

目前有一个父文件夹,然后父文件夹下有很多个子文件夹,然后子当子文件夹的名称为多个(多个名称的用逗号,或者顿号、或者减号-隔开表示了),然后现在需要达到的效果是,当子文件夹的名称为多个人时,自动分成多个文件夹,以单个名称命名,然后需要把里面的内容复制到新创建的文件夹中,如果新创建的文件夹名称有重复的,在名称后面加上后缀,然后删除处理的文件,
效果图如下:


作者: Batcher    时间: 2022-5-16 14:46

回复 1# a475012621


如果需要上传文件,可以用阿里云盘或百度网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: a475012621    时间: 2022-5-16 14:51

1111111111111
作者: a475012621    时间: 2022-5-16 14:51

111111111111111
作者: a475012621    时间: 2022-5-16 14:51

111111111111111111
作者: a475012621    时间: 2022-5-16 14:57

设置好了,大佬,帮忙看下
作者: qixiaobin0715    时间: 2022-5-16 14:59

本帖最后由 qixiaobin0715 于 2022-5-16 15:00 编辑

分拆前的文件夹中的文件如何处理?也需要分开吗?
作者: flashercs    时间: 2022-5-16 15:03

本帖最后由 flashercs 于 2022-5-16 16:13 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. for /d %%A in (*) do (
  5.   set ctr=0
  6.   set t=%%~A
  7.   set "t=!t:,=,!"
  8.   set "t=!t:、=,!"
  9.   set "t=!t:-=,!"
  10.   for %%B in (!t!) do (
  11.     set /a ctr+=1
  12.     call :getNewName "%%~B"
  13.     if !ctr! equ 1 (
  14.       set firstdir=%%~B
  15.     ) else (
  16.       2>nul md !newname!
  17.       xcopy "%%A\*" !newname! /e
  18.     )
  19.   )
  20.   if !ctr! gtr 1 (
  21.     call :getNewName "!firstdir!"
  22.     ren "%%A" "!newname!"
  23.   )
  24. )
  25. endlocal
  26. pause
  27. exit /b
  28. :getNewName oldname
  29. set n=0
  30. set newname="%~1"
  31. :loop
  32. if not exist %newname% (
  33.   exit /b
  34. )
  35. set /a n+=1
  36. set newname="%~1_%n%"
  37. goto loop
  38. exit /b
复制代码

作者: Batcher    时间: 2022-5-16 17:51

回复 6# a475012621


    你这个图床有问题吧,其他人看不到图片。
作者: qixiaobin0715    时间: 2022-5-17 17:06

代码中含有rd命令慎用,请备份好源文件。未测试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /ad *,* *-* *、* *,*') do (
  4.     set str=%%a
  5.     for %%b in (, 、 -) do set str=!str:%%b= !
  6.     for %%i in (!str!) do (
  7.         if exist %%i (
  8.             set /a _%%i+=1
  9.             md "%%i(!_%%i!)"
  10.             xcopy "%%a\*.*" "%%i(!_%%i!)\"
  11.         ) else (
  12.             md "%%i"
  13.             xcopy "%%a\*.*" "%%i\"
  14.         )
  15.     )
  16.     rd /s /q %%a
  17. )
  18. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2