Board logo

标题: [文件操作] 批处理怎样以父文件夹名命名子文件夹? [打印本页]

作者: mypcl01    时间: 2021-8-1 18:54     标题: 批处理怎样以父文件夹名命名子文件夹?

想要一个BAT文件
1、以父文件夹名+子文件夹名 命名子文件夹;
2、以父文件夹名+子文件夹名 命名孙子文件且以01开始;

例:父文件夹名 武器 ,子文件夹名: 古代; 现代。

批处理后:
第一步:将子文件夹名为:武器古代;武器现代
第二步:孙子文件夹名为:武器古代01;武器现代01;
第三步:孙子文件名为:
  武器古代01-01,武器古代01-02,武器古代01-,武器古代01-03......;

  武器现代01-01,武器现代01-02,武器现代01-,武器现代01-03......。
作者: newswan    时间: 2021-8-1 20:39

本帖最后由 newswan 于 2021-8-1 22:59 编辑

powershell
递归处理所有子目录
在所有级间都添加了 "-"
武器-现代-01-01
稍微有点不符合
  1. function f-1()
  2. {
  3.     push-location $args[0]
  4.     $p = (get-item .).name
  5.     Get-ChildItem -Directory | foreach-object {
  6.         Rename-Item $_ -NewName ($p + "-" + $_.name)
  7.     }
  8.     Get-ChildItem -Directory | foreach-object {
  9.         f-1 $_.name
  10.     }
  11.     pop-location
  12. }
  13. f-1 "C:\Users\admin\Desktop\aaa"
复制代码

作者: mypcl01    时间: 2021-8-1 21:17

放在哪一级运行?C:\Users\admin\Desktop\aaa什么意思?
作者: newswan    时间: 2021-8-1 22:46

本帖最后由 newswan 于 2021-8-1 22:58 编辑

回复 3# mypcl01


  随便在哪里,用你目标目录代替 aaa 哪里,那是测试目录
作者: qixiaobin0715    时间: 2021-8-1 23:10

...父文件夹——文件夹——子文件夹...
作者: mypcl01    时间: 2021-8-3 21:33

本帖最后由 mypcl01 于 2021-8-3 22:11 编辑

您好!谢谢,能关注我的问题。
  闪退,没有变化。尝试放在各级目录里,改写成这样 f-1 "C:\Users\admin\Desktop\I:\实验0803\实验0803\新" 或f-1 "I:\实验0803\实验0803\新"都不行。希望一个不需要每次改目录的,放在父文件夹就能运行的。

我有一个单层命名的,放在文件夹下,不是在父文件夹下,重命名孙子文件夹里的文件,也是勉强使用。命名时是:文件名(1),不希望带括号,数字从01开始。自己不会改。能不能改成放在父文件夹运行,文件名不带括号,数字从01开始。
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f %%i in ('dir /b /ad') do (
set /a num=0
for /f %%x in ('dir /b %%i\*.*') do (
set /a num+=1
echo %%i\%%x 重命名为 %%i^(!num!^).*
ren "%%i\%%x" "%%i^(!num!^).*"
))
pause
作者: cmd1152    时间: 2021-8-3 22:42

本帖最后由 cmd1152 于 2021-8-3 22:46 编辑

只能帮你去括号、数字从01开始了,代码隐藏在下面
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f %%i in ('dir /b /ad') do (
set /a num=0
for /f %%x in ('dir /b %%i\*.*') do (
set /a num+=1
echo %%i\%%x 重命名为 %%i0!num!.*
ren "%%i\%%x" "%%i0!num!.*"
))
pause

作者: newswan    时间: 2021-8-4 00:00

回复 6# mypcl01

先看看这个
http://www.bathome.net/thread-59270-1-1.html
  1. function f-1()
  2. {
  3.     push-location $args[0]
  4.     $p = (get-item .).name
  5.     Get-ChildItem -Directory | foreach-object {
  6.         if ( -not ($_.basename).contains("-") )
  7.         {
  8.             Rename-Item $_ -NewName ($p + "-" + $_.name)
  9.         }
  10.     }
  11.     Get-ChildItem -Directory | foreach-object {
  12.         f-1 $_.name
  13.     }
  14.     pop-location
  15. }
  16. f-1 "."
复制代码
"." 表示本目录
添加了一个判断,已经处理过的不再处理,不需要的话,删除 6 7 9 行
作者: qixiaobin0715    时间: 2021-8-4 06:23

本帖最后由 qixiaobin0715 于 2021-8-4 09:24 编辑

楼主所说的父、子、孙文件夹有点乱,你指的文件目录是下面的哪一种:
1.父文件夹\本文件夹(批处理所在文件夹)\子文件夹\孙文件夹
2.父文件夹(批处理所在文件夹)\子文件夹\孙文件夹
按正常理解应当是第1种目录结构。
另外是否只有孙文件夹下有文件?
作者: mypcl01    时间: 2021-8-6 00:19

本帖最后由 mypcl01 于 2021-8-6 00:21 编辑

谢谢,回复!
1.父文件夹\子文件夹\孙文件夹。批处理放在父文件夹下运行,父文件夹下有文件,也有子文件夹,子文件夹下有孙文件夹,孙文件夹下有文件。
2.父文件夹名;武器。子文件夹名:现代,古代。
   父文件夹下的零散文件以父文件夹名-01,父文件夹名-02......命名。例子:武器-01,武器-02......。
   子文件夹名以父文件夹名+原有的子文件夹名命名。例子:父文件夹名;武器。子文件夹名:现代,古代。子文件夹名命名后;武器现代,武器古代。
3.孙子文件夹名以上级文件夹名01;上级02....命名。例子:武器现代01,武器现代02......:武器古代01,武器古代02......。
孙子文件夹中的文件,以上级01-01,上级01-02......命名。例子:武器现代01-01,武器现代01-02......;武器现代02-01,武器现代02-02...:武器古代01-01,武器古代01-02,武器古代02-01,武器古代02-...。
本来是想用已有的一个bat命名父文件夹下的散文件,再运行您写bat的命名其他文件。
附件怎么也传不上
作者: newswan    时间: 2021-8-6 12:03

本帖最后由 newswan 于 2021-8-6 12:28 编辑

powershell
  1. function f-1()
  2. {
  3.     push-location $args[0]
  4.     $p = (get-item .).name
  5.     Get-ChildItem -Directory | foreach-object {
  6.         Rename-Item $_ -NewName ($p + "-" + $_.name)
  7.     }
  8.     Get-ChildItem -Directory | foreach-object {
  9.         f-1 $_.name
  10.     }
  11.     pop-location
  12. }
  13. function fl-1()
  14. {
  15.     push-location $args[0]
  16.     $p = (get-item .).name
  17.     $count = 0
  18.     Get-ChildItem -File "*.txt" | foreach-object {
  19.         $count += 1
  20.         Rename-Item $_ -NewName ($p + "-" + $count.ToString().PadLeft(2,"0") + $_.Extension)
  21.     }
  22.     Get-ChildItem -Directory | foreach-object {
  23.         Rename-Item $_ -NewName ($p + $_.name)
  24.     }
  25.     Get-ChildItem -Directory | foreach-object {
  26.         fl-2 $_.name
  27.     }
  28.     pop-location
  29. }
  30. function fl-2()
  31. {
  32.     push-location $args[0]
  33.     $p = (get-item .).name
  34.     $count = 0
  35.     Get-ChildItem -Directory | foreach-object {
  36.         $count += 1
  37.         Rename-Item $_ -NewName ($p + $count.ToString().PadLeft(2,"0"))
  38.     }
  39.     Get-ChildItem -Directory | foreach-object {
  40.         fl-3 $_.name
  41.     }
  42.     pop-location
  43. }
  44. function fl-3()
  45. {
  46.     push-location $args[0]
  47.     $p = (get-item .).name
  48.     $count = 0
  49.     Get-ChildItem -File "*.txt" | foreach-object {
  50.         $count += 1
  51.         Rename-Item $_ -NewName ($p + "-" + $count.ToString().PadLeft(2,"0") + $_.Extension)
  52.     }
  53.     pop-location
  54. }
  55. fl-1 "."
复制代码

作者: newswan    时间: 2021-8-6 12:05

本帖最后由 newswan 于 2021-8-6 12:21 编辑

回复 10# mypcl01


你可以发 目录树
  1. C:\Users\admin\Desktop\aaa>tree /f
  2. Folder PATH listing
  3. Volume serial number is DC2F-31AE
  4. C:.
  5. │   a.ps1
  6. │   a.txt
  7. │   a2.txt
  8. │   a6.txt
  9. │   b.txt
  10. │   b1.txt
  11. │   b2.txt
  12. ├───1
  13. │   ├───11
  14. │   │       a11
  15. │   │       a22
  16. │   │
  17. │   └───22
  18. │           a11
  19. │           a22
  20. └───2
  21.     ├───11
  22.     │       a11
  23.     │       a22
  24.     │
  25.     └───22
  26.             a11
  27.             a22
复制代码

作者: qixiaobin0715    时间: 2021-8-7 11:24

回复 10# mypcl01
  1. @echo off
  2. for %%i in (%~dp0.) do set folder0=%%~ni
  3. setlocal enabledelayedexpansion
  4. for /d %%a in (*) do (
  5.     ren "%%a" "%folder0%%%a"
  6.     pushd "%folder0%%%a"
  7.     set n=100
  8.     for /d %%b in (*) do (
  9.         set m=100
  10.         set /a n+=1
  11.         ren "%%b" "%folder0%%%a!n:~1!"
  12.         for %%c in ("%folder0%%%a!n:~1!\*") do (
  13.             set /a m+=1
  14.             ren "%%c" "%folder0%%%a!n:~1!-!m:~1!%%~xc"
  15.         )
  16.         set m=100
  17.     )
  18.     set n=100
  19.     popd
  20. )
  21. pause
复制代码

作者: newswan    时间: 2021-8-7 11:57

需求翻译:

目录树有三级
一级\二级\三级

目录更名
一级\一级二级\一级二级num

文件更名
一级目录  一级-num
三级目录  一级二级-num
作者: qixiaobin0715    时间: 2021-8-7 13:12

如果一级目录文件也需改名的话,13楼3~4行之间加入以下代码:
  1. set x=100
  2. for %%i in (*) do (
  3. set /a x+=1
  4. ren "%%i" "%folder0%!x:~1!%%~xi"
  5. )
复制代码

作者: mypcl01    时间: 2021-8-8 00:35

@echo off
for %%i in (%~dp0.) do set folder0=%%~ni
setlocal enabledelayedexpansion
set x=100
for %%i in (*) do (
set /a x+=1
ren "%%i" "%folder0%!x:~1!%%~xi"
)
for /d %%a in (*) do (
    ren "%%a" "%folder0%%%a"
    pushd "%folder0%%%a"
    set n=100
    for /d %%b in (*) do (
        set m=100
        set /a n+=1
        ren "%%b" "%folder0%%%a!n:~1!"
        for %%c in ("%folder0%%%a!n:~1!\*") do (
            set /a m+=1
            ren "%%c" "%folder0%%%a!n:~1!-!m:~1!%%~xc"
        )
        set m=100
    )
    set n=100
    popd
)
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f %%i in ('dir /b /ad') do (
set /a num=0
for /f %%x in ('dir /b %%i\*.*') do (
set /a num+=1
echo %%i\%%x 重命名为 %%i^-0!num!^.*
ren "%%i\%%x" "%%i^-0!num!^.*"
))
pause
加进第3、4行,还加了原有的一段,达到了预想的效果,谢谢!嘿嘿,就是连批处理命令自己也被重命名。这已经很好了,谢谢!
作者: gcbgczhang    时间: 2021-8-8 11:24

表述的不清楚,最好用:文件夹名a\文件夹b\文文件名c,这样的形式表述状态,并将需要的结果也用类似方式表示
作者: gcbgczhang    时间: 2021-8-8 11:56

楼主是想得到这样的目标树,你是想将现有文件改名归类,还是仅建一个空文件就可以呢,如果是想归类,那现有文件是什么样最好告诉大家,按12楼的方法把你的目标树列出来给大家分析才可行。
武器\
武器\武器古代\
武器\武器古代\武器古代01
武器\武器古代\武器古代01\武器古代01-01
武器\武器古代\武器古代01\武器古代01-02
武器\武器现代\
武器\武器现代\武器现代01
武器\武器现代\武器现代01\武器现代01-01
武器\武器现代\武器现代01\武器现代01-02
作者: mypcl01    时间: 2021-8-9 20:47

谢谢,受教!




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