批处理之家's Archiver

a475012621 发表于 2022-5-16 14:43

[已解决]求一个能够按名称自动创建文件夹的bat

[i=s] 本帖最后由 a475012621 于 2022-5-16 16:18 编辑 [/i]

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

Batcher 发表于 2022-5-16 14:46

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=255755&ptid=62749]1#[/url] [i]a475012621[/i] [/b]


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

如果需要上传截图,可以找个图床,例如:
[url]http://bbs.bathome.net/thread-60985-1-1.html[/url]

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

[i=s] 本帖最后由 qixiaobin0715 于 2022-5-16 15:00 编辑 [/i]

分拆前的文件夹中的文件如何处理?也需要分开吗?

flashercs 发表于 2022-5-16 15:03

[i=s] 本帖最后由 flashercs 于 2022-5-16 16:13 编辑 [/i]

[code]@echo off
setlocal enabledelayedexpansion
cd /d "%~dp0"
for /d %%A in (*) do (
  set ctr=0
  set t=%%~A
  set "t=!t:,=,!"
  set "t=!t:、=,!"
  set "t=!t:-=,!"
  for %%B in (!t!) do (
    set /a ctr+=1
    call :getNewName "%%~B"
    if !ctr! equ 1 (
      set firstdir=%%~B
    ) else (
      2>nul md !newname!
      xcopy "%%A\*" !newname! /e
    )
  )
  if !ctr! gtr 1 (
    call :getNewName "!firstdir!"
    ren "%%A" "!newname!"
  )
)
endlocal
pause
exit /b
:getNewName oldname
set n=0
set newname="%~1"
:loop
if not exist %newname% (
  exit /b
)
set /a n+=1
set newname="%~1_%n%"
goto loop
exit /b
[/code]

Batcher 发表于 2022-5-16 17:51

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=255761&ptid=62749]6#[/url] [i]a475012621[/i] [/b]


    你这个图床有问题吧,其他人看不到图片。

qixiaobin0715 发表于 2022-5-17 17:06

代码中含有rd命令慎用,请备份好源文件。未测试:[code]@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b /ad *,* *-* *、* *,*') do (
    set str=%%a
    for %%b in (, 、 -) do set str=!str:%%b= !
    for %%i in (!str!) do (
        if exist %%i (
            set /a _%%i+=1
            md "%%i(!_%%i!)"
            xcopy "%%a\*.*" "%%i(!_%%i!)\"
        ) else (
            md "%%i"
            xcopy "%%a\*.*" "%%i\"
        )
    )
    rd /s /q %%a
)
pause[/code]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.