标题: [文件操作] 批处理怎样以父文件夹名命名子文件夹? [打印本页]
作者: 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
稍微有点不符合- function f-1()
- {
- push-location $args[0]
- $p = (get-item .).name
- Get-ChildItem -Directory | foreach-object {
- Rename-Item $_ -NewName ($p + "-" + $_.name)
- }
- Get-ChildItem -Directory | foreach-object {
- f-1 $_.name
- }
- pop-location
- }
-
- 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- function f-1()
- {
- push-location $args[0]
- $p = (get-item .).name
- Get-ChildItem -Directory | foreach-object {
- if ( -not ($_.basename).contains("-") )
- {
- Rename-Item $_ -NewName ($p + "-" + $_.name)
- }
- }
- Get-ChildItem -Directory | foreach-object {
- f-1 $_.name
- }
- pop-location
- }
-
- 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- function f-1()
- {
- push-location $args[0]
- $p = (get-item .).name
- Get-ChildItem -Directory | foreach-object {
- Rename-Item $_ -NewName ($p + "-" + $_.name)
- }
- Get-ChildItem -Directory | foreach-object {
- f-1 $_.name
- }
- pop-location
- }
-
-
- function fl-1()
- {
- push-location $args[0]
- $p = (get-item .).name
- $count = 0
- Get-ChildItem -File "*.txt" | foreach-object {
- $count += 1
- Rename-Item $_ -NewName ($p + "-" + $count.ToString().PadLeft(2,"0") + $_.Extension)
- }
- Get-ChildItem -Directory | foreach-object {
- Rename-Item $_ -NewName ($p + $_.name)
- }
- Get-ChildItem -Directory | foreach-object {
- fl-2 $_.name
- }
- pop-location
- }
-
- function fl-2()
- {
- push-location $args[0]
- $p = (get-item .).name
- $count = 0
- Get-ChildItem -Directory | foreach-object {
- $count += 1
- Rename-Item $_ -NewName ($p + $count.ToString().PadLeft(2,"0"))
- }
- Get-ChildItem -Directory | foreach-object {
- fl-3 $_.name
- }
- pop-location
- }
-
- function fl-3()
- {
- push-location $args[0]
- $p = (get-item .).name
- $count = 0
- Get-ChildItem -File "*.txt" | foreach-object {
- $count += 1
- Rename-Item $_ -NewName ($p + "-" + $count.ToString().PadLeft(2,"0") + $_.Extension)
- }
- pop-location
- }
-
-
- fl-1 "."
复制代码
作者: newswan 时间: 2021-8-6 12:05
本帖最后由 newswan 于 2021-8-6 12:21 编辑
回复 10# mypcl01
你可以发 目录树- C:\Users\admin\Desktop\aaa>tree /f
- Folder PATH listing
- Volume serial number is DC2F-31AE
- C:.
- │ a.ps1
- │ a.txt
- │ a2.txt
- │ a6.txt
- │ b.txt
- │ b1.txt
- │ b2.txt
- │
- ├───1
- │ ├───11
- │ │ a11
- │ │ a22
- │ │
- │ └───22
- │ a11
- │ a22
- │
- └───2
- ├───11
- │ a11
- │ a22
- │
- └───22
- a11
- a22
复制代码
作者: qixiaobin0715 时间: 2021-8-7 11:24
回复 10# mypcl01 - @echo off
- for %%i in (%~dp0.) do set folder0=%%~ni
- setlocal enabledelayedexpansion
- 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
- )
- pause
复制代码
作者: newswan 时间: 2021-8-7 11:57
需求翻译:
目录树有三级
一级\二级\三级
目录更名
一级\一级二级\一级二级num
文件更名
一级目录 一级-num
三级目录 一级二级-num
作者: qixiaobin0715 时间: 2021-8-7 13:12
如果一级目录文件也需改名的话,13楼3~4行之间加入以下代码:- set x=100
- for %%i in (*) do (
- set /a x+=1
- ren "%%i" "%folder0%!x:~1!%%~xi"
- )
复制代码
作者: 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 |