Board logo

标题: [文件操作] [已解决]批处理 ren 命令怎样修改子文件里的文件名称? [打印本页]

作者: sdhaozao    时间: 2015-2-10 22:44     标题: [已解决]批处理 ren 命令怎样修改子文件里的文件名称?

本帖最后由 pcl_test 于 2018-3-18 19:29 编辑

咨询一个只有小白才问的问题

我现在只能理解到这样的步骤,关于批处理,我用这个代码可以修改当前目录内对应文件的名字,如果想顺便修改子文件内的名字应该怎么操作啊?
貌似CD进文件夹 和加/s/b 参数都不行,不要嘲笑我,我知道ren 貌似是没有/s/b 参数
  1. ren 1.docx A-1.docx
复制代码

作者: pcl_test    时间: 2015-2-10 23:41

本帖最后由 pcl_test 于 2018-3-18 19:11 编辑

回复 1# sdhaozao

这要结合实际情况才可以,不同的情况,写法各异,主要还是路径的获取问题,与ren无关
假设有如下文件结构,现要将D:\test文件夹里的所有文件名前添加test字符
D:\test
│  1.txt
│  
└─A
    │  3.pdf
    │  
    ├─BB
    │      g.exe
    │      
    └─CC
        └─CCC
                h.rar
效果
D:\test
│  test1.txt
│  
└─A
    │  test3.pdf
    │  
    ├─BB
    │      testg.exe
    │      
    └─CC
        └─CCC
                testh.rar

那么可以这样
  1. @echo off
  2. cd /d "D:\test\"
  3. for /f "delims=" %%a in ('dir /a-d /s /b') do ren "%%a" "test%%~nxa"
  4. pause
复制代码

作者: sdhaozao    时间: 2015-2-11 00:06

回复 2# pcl_test

不好意思可能是我没有讲清楚,

应该是这样的
D:\test
│   fit up.pdf
│  
└─A
    │   fit up.pdf
    │  
    ├─BB
    │       fit up.pdf
    │      
    └─CC
        └─CCC
                 fit up.pdf

在全部的 fit up.pdf前面加上01,变成 01- fit up.pdf

当然我还会再加上你给我的另外一个命令, 这样文件最后就变成a-01-fit up.pdf 。 bb-01-fit up.pdf 这样的啦

每个文件夹下不超过8个PDF文件,对应编号是01-06, 只要写出一个文件,其余的我copy 改里面的内容应该就可以撸。
作者: DAIC    时间: 2015-2-11 09:19

我知道ren 貌似是没有/s/b 参数

不是貌似没有,而是肯定没用。
一个 ren 命令无法满足你的需求,你还要学习 for 命令。
作者: sdhaozao    时间: 2015-2-11 11:29

回复 4# DAIC


我是因为工作上最近接触了很多很多的文件才需要使用批处理文件,我怎么感觉看每一个单独的命令我都知道是什么意思,合在一起我就不知道他们要做什么了?
分析别人给我做的批处理代码的时候的困惑...
作者: DAIC    时间: 2015-2-11 12:29

回复 5# sdhaozao


这很正常。什么知识都是需要一个慢慢积累的过程。人家学了十年八年写出来的代码,你看不懂很正常。
我们泛泛之辈绝非生下来就懂BAT的天才,还是踏踏实实学习方为正道。
作者: sdhaozao    时间: 2015-2-11 12:51

本帖最后由 sdhaozao 于 2015-2-11 13:10 编辑

回复 2# pcl_test

你的这个代码不能执行,提示如下:

system can not find the specified

我修改了代码如下:
  1. @echo off
  2. cd /d "D:\new\"
  3. for /f "delims=" %%a in ('dir /s /b *.pdf') do (
  4. ren "%%a" "01-%%~nxa"
  5. )
  6. pause
复制代码
效果是当前及子文件夹全部文件前面增加了01....

我找到一个思路,我将一下文件名字录入到1.txt 上面的代码能读取或者直接添加到代码中吗?

FIT-UP REPORT.pdf 01-FIT-UP REPORT.pdf
MAGNETIC PARTICLE EXAMINATION REPORT.pdf 05-MAGNETIC PARTICLE EXAMINATION REPORT.pdf
STAGE RELEASE NOTICE.pdf 04-STAGE RELEASE NOTICE.pdf
STRUCTURAL DEMENSIONAL REPORT AW.pdf 03-STRUCTURAL DEMENSIONAL REPORT AW.pdf
STRUCTURAL DIMENSIONAL INSPECTION REPORT BW.pdf 03-STRUCTURAL DIMENSIONAL INSPECTION REPORT BW.pdf
WELD VISUAL INSPECTION REPORT.pdf 02-WELD VISUAL INSPECTION REPORT.pdf
作者: pcl_test    时间: 2015-2-11 13:17

回复 7# sdhaozao

代码没问题,不是说了要结合实际情况才可以,system can not find the specified就说明路径的获取上有问题,代码仅供参考,所以你自己没改好,就会出现问题
作者: sdhaozao    时间: 2015-2-11 13:31

回复 7# sdhaozao

我这样直接给变量赋值的行为是不是很愚蠢啊, 但是应该怎么处理几个变量呢?
这个命令不能执行
  1. @echo off
  2. cd /d "D:\New\"
  3. for /f "delims=" %%a in ('dir /s/b *.pdf') do (
  4. if "%%a"="FIT-UP REPORT.pdf"|ren "%%a" "01-%%~nxa"
  5. if "%%a"="STAGE RELEASE NOTICE.pdf"|ren "%%a" "04-%%~nxa"
  6. )
  7. pause
复制代码

作者: pcl_test    时间: 2015-2-11 13:45

本帖最后由 pcl_test 于 2018-3-18 19:26 编辑

回复 9# sdhaozao

思路是可以的,只是语法不对,而且如果文件多的话,那就要很长的代码了
假设有D:\test\的某个文件夹里有1.pdf、2.pdf
  1. @echo off
  2. cd /d "D:\test\"
  3. for /f "delims=:" %%a in ('findstr /bln "::原名称|新名称" "%~f0"') do set n=%%a
  4. for /f "delims=" %%a in ('dir /a-d/s/b *.pdf') do (
  5.     for /f "tokens=1* delims=|" %%b in ('more +%n% "%~f0"') do (
  6.         if /i "%%~nxa" equ "%%b" ren "%%a" "%%c"
  7.     )
  8. )
  9. pause&exit
  10. ::原名称|新名称
  11. FIT-UP REPORT.pdf|01-FIT-UP REPORT.pdf
  12. MAGNETIC PARTICLE EXAMINATION REPORT.pdf|05-MAGNETIC PARTICLE EXAMINATION REPORT.pdf
  13. STAGE RELEASE NOTICE.pdf|04-STAGE RELEASE NOTICE.pdf
  14. STRUCTURAL DEMENSIONAL REPORT AW.pdf|03-STRUCTURAL DEMENSIONAL REPORT AW.pdf
  15. STRUCTURAL DIMENSIONAL INSPECTION REPORT BW.pdf|03-STRUCTURAL DIMENSIONAL INSPECTION REPORT BW.pdf
  16. WELD VISUAL INSPECTION REPORT.pdf|02-WELD VISUAL INSPECTION REPORT.pdf
复制代码

作者: sdhaozao    时间: 2015-2-11 13:45

本帖最后由 sdhaozao 于 2015-2-11 13:47 编辑

最终解决方案,虽然看起来很愚蠢,作为新手我尽力了, 有大神愿意帮助精简代码最好了。
  1. @echo off
  2. cd /d "D:\New\"
  3. for /f "delims=" %%a in ('dir /s/b "FIT-UP REPORT.pdf"') do (
  4. ren "%%a" "01-%%~nxa"
  5. )
  6. for /f "delims=" %%a in ('dir /s/b "WELD VISUAL INSPECTION REPORT.pdf"') do (
  7. ren "%%a" "02-%%~nxa"
  8. )
  9. for /f "delims=" %%a in ('dir /s/b "STRUCTURAL DEMENSIONAL REPORT AW.pdf"') do (
  10. ren "%%a" "03-%%~nxa"
  11. )
  12. for /f "delims=" %%a in ('dir /s/b "STRUCTURAL DIMENSIONAL INSPECTION REPORT BW.pdf"') do (
  13. ren "%%a" "03-%%~nxa"
  14. )
  15. for /f "delims=" %%a in ('dir /s/b "STAGE RELEASE NOTICE_Part1.pdf"') do (
  16. ren "%%a" "04-%%~nxa"
  17. )
  18. for /f "delims=" %%a in ('dir /s/b "MAGNETIC PARTICLE EXAMINATION REPORT.pdf"') do (
  19. ren "%%a" "05-%%~nxa"
  20. )
  21. for /f "delims=" %%a in ('dir /s/b "STAGE RELEASE NOTICE_Part2.pdf"') do (
  22. ren "%%a" "05-%%~nxa"
  23. )
  24. pause
复制代码

作者: sdhaozao    时间: 2015-2-11 13:54

回复 10# pcl_test

非常感谢,比我写那个短了一倍,已经解决了。拜谢!!
  1. @echo off
  2. cd /d "D:\new\"
  3. for /f "delims=" %%a in ('dir /s/b *.pdf') do (
  4. if "%%~nxa" == "FIT-UP REPORT.pdf" ren "%%a" "01-%%~nxa"
  5. if "%%~nxa" == "WELD VISUAL INSPECTION REPORT.pdf" ren "%%a" "02-%%~nxa"
  6. if "%%~nxa" == "STRUCTURAL DEMENSIONAL REPORT AW.pdf" ren "%%a" "03-%%~nxa"
  7. if "%%~nxa" == "STRUCTURAL DIMENSIONAL INSPECTION REPORT BW.pdf" ren "%%a" "03-%%~nxa"
  8. if "%%~nxa" == "STAGE RELEASE NOTICE_Part1.pdf" ren "%%a" "04-%%~nxa"
  9. if "%%~nxa" == "MAGNETIC PARTICLE EXAMINATION REPORT.pdf" ren "%%a" "05-%%~nxa"
  10. if "%%~nxa" == "STAGE RELEASE NOTICE_Part2.pdf" ren "%%a" "05-%%~nxa"
  11. )
  12. pause
复制代码

作者: pcl_test    时间: 2015-2-11 14:04

回复 12# sdhaozao

其实这几天你发的贴都有许多人关注过,看浏览量就知道了,但因为批处理对精细的操作不是很好,再加上你的描述不够,大家都无从下手,操作越精细描述就要越详细,所以如果仅是命名这个操作,你能把命名规则说清楚了,还是可以做到的,至于对pdf的合并和分解,这个需要借助第三方软件
作者: sdhaozao    时间: 2015-2-11 14:34

回复 13# pcl_test

关键是我接触的时间少,所以不了解这方面的内容。

幸好,有大家的帮助,我以后也会多学习一点的。

PDF部分,我只能一个一个合并了。

非常感谢,现在这样已经让我合并的时候调整文件顺序简洁了很多。




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