[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理怎样以父文件夹名命名子文件夹?

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

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

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

  武器现代01-01,武器现代01-02,武器现代01-,武器现代01-03......。

本帖最后由 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"
复制代码

TOP

放在哪一级运行?C:\Users\admin\Desktop\aaa什么意思?

TOP

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

回复 3# mypcl01


  随便在哪里,用你目标目录代替 aaa 哪里,那是测试目录

TOP

...父文件夹——文件夹——子文件夹...

TOP

本帖最后由 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

TOP

本帖最后由 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
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

回复 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 行

TOP

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

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

TOP

本帖最后由 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的命名其他文件。
附件怎么也传不上

TOP

本帖最后由 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 "."
复制代码

TOP

本帖最后由 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
复制代码

TOP

回复 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
复制代码

TOP

需求翻译:

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

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

文件更名
一级目录  一级-num
三级目录  一级二级-num
1

评分人数

TOP

如果一级目录文件也需改名的话,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. )
复制代码

TOP

返回列表