标题: [文件操作] 【已解决】批处理实现文件夹命名 求大佬帮忙 [打印本页]
作者: k员外 时间: 2021-1-5 14:18 标题: 【已解决】批处理实现文件夹命名 求大佬帮忙
本帖最后由 k员外 于 2021-1-11 10:54 编辑
各位大佬 需要帮助哇
现在已经知道一个文件夹(1)里面有jc001萧炎 jc002药老 jc003魂天帝等100或者更多这种文件
而另一个文件(2)只知道 萧炎 药老 魂天帝 没有前面的jc编号
怎么把文件(2)里面文件夹名 批量改成文件(1)中一样变成jc001萧炎,jc002药老这种形式
求各位大佬帮帮忙
作者: Batcher 时间: 2021-1-5 14:35
回复 1# k员外
jc001萧炎 是文件还是文件夹?jc001萧炎固定都是前5位是编号么?
作者: k员外 时间: 2021-1-6 09:09
回复 2# Batcher
jc001萧炎是文件名 jc001是我举的列子 前面有一串数字610902117202jc001萧炎
jc之前的数字是固定的 jc之后是一个人一个编号
目前 我的需求是 有一个文件夹里面的文件夹名字全是610902117202jc00001+人名字~610902117202jc00100+人名
而另外一个文件夹 里面只知道这些人的名字 不知道前面的代码 我想让这个文件夹也有代码 而且名字要对的上。
有没有办法 。
作者: k员外 时间: 2021-1-6 09:10
回复 2# Batcher
jc001萧炎是文件夹 都是文件夹
作者: qixiaobin0715 时间: 2021-1-6 09:29
一会是文件一会是文件夹,你的表述好乱啊,都给你搞晕了。tree一下,截图上来,大家都清楚了。
作者: k员外 时间: 2021-1-6 12:56
回复 5# qixiaobin0715
传不上来 就是全都是文件夹 改的就是文件夹名字 都是文件夹
一个文件夹1里面全是610902117204JC00001 +人名 610902117204JC00002+人名
另一个文件夹2 全都是人名没有代码
现在我想让2文件夹李面的文件夹名字也有代码
作者: Batcher 时间: 2021-1-6 14:19
回复 3# k员外 - @echo off
- setlocal enabledelayedexpansion
- set "folder1=001"
- set "folder2=002"
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /b /ad %folder1%') do (
- set "str=%%i"
- set "name=!str:~19!"
- if exist "%folder2%\!name!" (
- ren "%folder2%\!name!" "%%i"
- )
- )
复制代码
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
作者: qixiaobin0715 时间: 2021-1-6 14:22
本帖最后由 qixiaobin0715 于 2021-1-6 14:51 编辑
回复 6# k员外
刚刚有点小问题,已修改。
未测试,小批量试一试。如果需要改名的文件夹路径是forder1,参照文件夹路径forder2。先说明的是:不是太精确。- @echo off
- set folder1=D:\abc
- set folder2=D:\123
- for /d %%a in ("%folder1%\*") do (
- for /d %%b in ("%folder2%\*%%~na") do ren "%%a" "%%~nb"
- )
- pause
复制代码
作者: k员外 时间: 2021-1-6 14:59
回复 7# Batcher
我太笨了 没整好 图片也传不了 这样我举个例子 假设下面就是两个文件夹 我想让右边文件夹中的文件夹名跟左边一样
大概就是真么个意思
610902117213JC00315徐勇 罗长生
610902117213JC00316罗长生 缪正发
610902117213JC00317王元友 王元友
610902117213JC00318黄根东 徐勇
610902117213JC00319缪正发 黄根东
......... ......
作者: k员外 时间: 2021-1-6 14:59
回复 8# qixiaobin0715
我太笨了 没整好 图片也传不了 这样我举个例子 假设下面就是两个文件夹 我想让右边文件夹中的文件夹名跟左边一样
大概就是真么个意思
610902117213JC00315徐勇 罗长生
610902117213JC00316罗长生 缪正发
610902117213JC00317王元友 王元友
610902117213JC00318黄根东 徐勇
610902117213JC00319缪正发 黄根东
......... ......
作者: terse 时间: 2021-1-6 15:10
楼主大概想让两个文件夹里的文件名结构都一样吧
作者: k员外 时间: 2021-1-6 15:26
回复 11# terse
是的就是让他们的名字一样
作者: qixiaobin0715 时间: 2021-1-6 15:41
真是和你说不清,这样:先在D盘根目录下创建abc和123两个文件夹,将左边的文件夹放到abc文件夹里,右边放到123文件夹里,运行代码试试看。
作者: k员外 时间: 2021-1-6 15:49
回复 13# qixiaobin0715
嘿嘿 我笨嘛,运行啦 也不行。
作者: k员外 时间: 2021-1-6 15:54
回复 13# qixiaobin0715
好了 好了 嘿嘿 谢谢
作者: k员外 时间: 2021-1-6 16:08
回复 7# Batcher
好了 目前还有一个小问题 就是 002文件夹中的人名
会有:徐勇 (无身份证) 之类的其他文字
我运行的时候 凡是带有其他文字的就没变
可以让这种 前面也加上对应代码不
麻烦了
作者: qixiaobin0715 时间: 2021-1-6 19:55
本帖最后由 qixiaobin0715 于 2021-1-7 13:51 编辑
回复 16# k员外
人名后是一个还是两个空格,是中文还是英文括号,对应的001的文件夹名是什么样的,重命名成什么样?举例
作者: k员外 时间: 2021-1-7 14:20
回复 17# qixiaobin0715 比如说
徐勇 (无身份证)
二组王霄。
我想让他们的文件夹名变成610902117201jc00001徐勇 (无身份证)
610902117201jc00054二组王霄
意思就是不管名字有没有带空格或者其他任何东西都可以添加上编号
作者: qixiaobin0715 时间: 2021-1-7 14:45
回复 18# k员外
未经测试- @echo off
- set folder1=D:\abc
- set folder2=D:\123
- setlocal enabledelayedexpansion
- for /d %%a in ("%folder2%\*") do (
- set "str=%%a"
- set "str1=!str:~0,19!"
- set "str2=!str:~19!"
- for /d %%b in ("%folder1%\*!str2!*") do ren "%%b" "!str1!%%~nb"
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2021-1-7 14:52
不精确。如果有人名:李双和李双双,就会出问题。
作者: qixiaobin0715 时间: 2021-1-7 15:02
实际上8楼代码特殊情况也会有问题。例如人名有:李双双和双双
作者: k员外 时间: 2021-1-7 17:17
回复 21# qixiaobin0715
哦哦 实在是 如果可以发图就好了
作者: k员外 时间: 2021-1-7 17:22
回复 21# qixiaobin0715
刚才运行了一下说语法命令错误
作者: 曾经的你 时间: 2021-1-7 17:39
假设你的姓名都为2-3位的话,获取倒数的三个字符;且判断倒数第三个字符是否为a-z和0-9排除?再拼接
作者: terse 时间: 2021-1-7 18:50
这个纯体力活 要精确判断 就得降低效率啊 再说楼主讲的也不是很明白
作者: qixiaobin0715 时间: 2021-1-7 20:02
回复 23# k员外
你举的两个例子:
徐勇 (无身份证)
二组王霄
前一个可能能够实现,就像terse说的那样要牺牲效率。
第二个几乎是不能完成的任务,电脑怎能判断“二组王霄”中“王霄”是人名呢?
建议使用7楼Batcher的代码处理后,特例应当不多,也好找排序就行,手工修改。
作者: qixiaobin0715 时间: 2021-1-7 22:11
本帖最后由 qixiaobin0715 于 2021-1-7 22:42 编辑
回复 23# k员外
再试试,不行的话,我放弃
人名文件夹放在这D:\abc
带编码的文件夹放在这D:\123- @echo off
- set folder1=D:\abc
- set folder2=D:\123
- setlocal enabledelayedexpansion
- for /d %%a in ("%folder2%\*") do (
- set "str=%%~na"
- set "str1=!str:~0,19!"
- set "str2=!str:~19!"
- for /f "delims=" %%b in ('dir /b /ad "%folder1%\*!str2!*"') do ren "%folder1%\%%b" "!str1!%%b"
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |