Board logo

标题: [文件操作] 【已解决】批处理如何删除文件夹(包括子文件夹)名字中的所有数字? [打印本页]

作者: wzf1024    时间: 2016-3-17 00:29     标题: 【已解决】批处理如何删除文件夹(包括子文件夹)名字中的所有数字?

本帖最后由 wzf1024 于 2016-3-18 16:31 编辑

想删除很多文件夹及子文件夹名字里的数字,找到个批处理,但是不能一次性同时操作子文件夹,要执行多次,如果不知道有多少级文件夹就难保证操作彻底。哪位大侠帮忙改改
  1. cls&setlocal  ENABLEDELAYEDEXPANSION
  2. @echo  将去掉文件夹名中的数字和点号1234567890 .
  3. @echo  请输入你额外需要去掉的字符并回车
  4. @echo  无也请回车,在这个界面里同样可以使用输入法:
  5. set /p var=
  6. for /f "delims=" %%a in ('dir /ad /b /s') do (
  7.     set name=%%~na
  8.     set name2=%%~xa
  9.     for %%j in (0 1 2 3 4 5 6 7 8 9 . !var!) do set name=!name:%%j=!
  10.     call ren "%%a" "!name!!name2!"
  11. )
复制代码

作者: happy886rr    时间: 2016-3-17 01:07

本帖最后由 happy886rr 于 2016-3-18 16:34 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p str=请输入过滤字符(或直接回车):
  3. for /f "delims=" %%a in ('dir /ad /b /s ^|sort /r') do (
  4. set s=%%~na
  5. set k=1
  6. for %%b in (0 1 2 3 4 5 6 7 8 9 . !str!) do (
  7. set s=!s:%%b=!
  8. if "!s!"=="" (set k=0)
  9. )
  10. if !k! equ 0 (
  11. echo 目录名不能为空
  12. echo “%%a”
  13. ) else (
  14. ren "%%a" "!s!"||echo “%%a”
  15. )
  16. )
  17. echo 执行完毕!
  18. pause>nul
复制代码
回复 1# wzf1024
作者: flyinnet9    时间: 2016-3-17 11:18

借楼主代码一用,如果你的代码没问题的话,排个序就可以解决了
  1. cls&setlocal  ENABLEDELAYEDEXPANSION
  2. @echo  将去掉文件夹名中的数字和点号1234567890 .
  3. @echo  请输入你额外需要去掉的字符并回车
  4. @echo  无也请回车,在这个界面里同样可以使用输入法:
  5. set /p var=
  6. for /f "delims=" %%a in ('dir /ad /b /s ^|sort /r') do (
  7.     set name=%%~na
  8.     set name2=%%~xa
  9.     for %%j in (0 1 2 3 4 5 6 7 8 9 . !var!) do set name=!name:%%j=!
  10.     call ren "%%a" "!name!!name2!"
  11. )
复制代码

作者: WHY    时间: 2016-3-17 21:08

楼主就这么轻描淡写的一问,要么是考虑不周,要么就是故意挖坑让人跳
如果重命名时出现重名的情况,你打算怎么办?
如果文件夹名全部由数字组成,你打算怎么办?
作者: wzf1024    时间: 2016-3-18 15:33

本帖最后由 wzf1024 于 2016-3-18 15:35 编辑

回复 4# WHY


确如你所说的,这种情况我没考虑周全,你有什么办法解决?
作者: wzf1024    时间: 2016-3-18 15:35

回复 2# happy886rr


    确如WHY所说的,存在重名及全部数字的文件夹名这种情况我没考虑周全,什么办法解决?
作者: wzf1024    时间: 2016-3-18 15:35

回复 3# flyinnet9


    确如WHY所说的,存在重名及全部数字的文件夹名这种情况我没考虑周全,什么办法解决?
作者: happy886rr    时间: 2016-3-18 16:09

本帖最后由 happy886rr 于 2016-3-18 16:35 编辑

回复 6# wzf1024
不用管那些,我的增强版(见原楼)都考虑了。
作者: WHY    时间: 2016-3-18 22:33

回复 8# happy886rr


    不是我打击你,你的“增强版”并没有增强。

动不动就来个“完美版”、“增强版”,下一次要不要来个“绝世无双”版呢?
作者: WHY    时间: 2016-3-18 22:37

如果文件夹重名,在文件夹后面补上 _A、_B ..._Z
同一文件夹中最多允许27次重复的子文件夹
  1. @echo off
  2. set "s=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
  3. for /f "delims=" %%i in ('dir /b /s /ad^|findstr "[^\\]*[0-9][^\\]*$"^|sort /r') do (
  4.     set "name=\%%~nxi"
  5.     cd /d "%%~dpi"
  6.     setlocal enabledelayedexpansion
  7.     for /l %%j in (0 1 9) do set "name=!name:%%j=!"
  8.     set "newName=!name!"
  9.     for %%j in (%s%) do (
  10.         if exist ".!newName!" set "newName=!name!_%%j"
  11.     )
  12.     for %%j in ("!newName:~1!") do (
  13.         endlocal
  14.         ren "%%i" "%%~nxj"
  15.     )
  16. )
  17. pause
复制代码

作者: WHY    时间: 2016-3-18 22:57

PowerShell可以这样:
  1. dir -Include *[0-9]* -Recurse | ?{$_ -is [System.IO.DirectoryInfo]} | `
  2. Sort FullName -Desc | %{
  3.     $Path = $_.FullName -replace '(.+\\).+$', '$1'
  4.     $Name = $_.Name -replace '\d+', ''
  5.     $n = 0; $NewName = $Name
  6.     while(test-Path -LiteralPath ($Path + $NewName)) {
  7.         $n1 = [math]::Truncate($n/26) + 65
  8.         $n2 = $n % 26 + 65; $n += 1
  9.         $NewName = $Name + '_' + [char][int]$n1 + [char]$n2
  10.     }
  11.     move -LiteralPath $_.FullName -Dest ($Path + $NewName)
  12. }
复制代码

作者: 172043209    时间: 2017-5-28 12:57

批处理如何删除文件夹(包括子文件夹)名字中的所有数字?能否反过来,【批处理如何删除文件夹(包括子文件夹)名字中的所有汉字?】,保留数字字母等字符,当然是从某一位开始,如:文件夹C11-2018-FG1312-3.0001睡了多久恢复了-你好,删除后面的文字及所有符号?不过一般情况后面只有汉字??
作者: 172043209    时间: 2017-5-28 13:00

批处理如何删除文件夹(包括子文件夹)名字中的所有汉字?




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