Board logo

标题: [文件操作] [已解决]批处理怎样搜索d盘下某文件并改名? [打印本页]

作者: ygqiang    时间: 2015-7-27 22:17     标题: [已解决]批处理怎样搜索d盘下某文件并改名?

[已解决]bat实现:搜索d盘下某文件名。如果找到就删除源文件。并将其名修改为源文件名?

比如,d盘某个目录下,有2个文件。。。
源文件:《重生之超级战舰》作者:彩虹之门.txt
满足条件的文件:《重生之超级战舰》作者:彩虹之门(冲突_admin-pc-PC_2015-07-27 00-18-59).txt

需要的bat批处理功能如下:
1、如果搜索到d盘下满足条件的文件,并且存在源文件,立即删除源文件。
2、并且将满足条件的文件名(含有“冲突”关键字),修改为源文件名。。
比如将:《重生之超级战舰》作者:彩虹之门(冲突_admin-pc-PC_2015-07-27 00-18-59).txt
修改为:《重生之超级战舰》作者:彩虹之门.txt

注意:d盘不同目录下。类似文件的情况,有很多。。。文件名/文件扩展名,都不是固定的。。


类似下面bat代码功能如下。帮忙修改下吧。能满足上面的要求
谢谢

  1. Have I Told You Lately.128kbs.mp3想批量改成Have I Told You Lately.mp3
  2. 删除文件名里的某个关键字。比如“128kbs”
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /a-d *.mp3') do (
  5.     set "file=%%i"
  6.     ren "%%i" "!file:.128kbs=!"
  7. )
复制代码

作者: 尘丶    时间: 2015-7-28 18:06

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2,3,4,5 delims=\." %%a in ('dir /s /b *.mp3^|findstr "Have I Told You
  3. Lately.128kbs.mp3"') do (
  4. cd /d %%a\%%b
  5. ren "%%c.%%d".%%e "Have I Told You Lately".mp3
  6. )
  7. pause
复制代码

作者: ygqiang    时间: 2015-7-28 18:12

本帖最后由 ygqiang 于 2015-7-28 21:54 编辑
尘丶 发表于 2015-7-28 18:06



假设:d盘某个目录下,有2个文件。。。
源文件:《重生之超级战舰》作者:彩虹之门.txt
满足条件的文件:《重生之超级战舰》作者:彩虹之门(冲突_admin-pc-PC_2015-07-27 00-18-59).txt

需要的bat批处理功能如下:
1、如果搜索到d盘下满足条件的文件,并且存在源文件,立即删除源文件。
2、并且将满足条件的文件名(含有“冲突”关键字),修改为源文件名。。
比如将:《重生之超级战舰》作者:彩虹之门(冲突_admin-pc-PC_2015-07-27 00-18-59).txt
修改为:《重生之超级战舰》作者:彩虹之门.txt


注意:d盘不同目录下。类似文件的情况,有很多。。。文件名/文件扩展名,都不是固定的。。
作者: 尘丶    时间: 2015-7-28 18:31

回复 3# ygqiang


    我可以理解为把:《重生之超级战舰》作者:彩虹之门(冲突_admin-pc-PC_2015-07-27 00-18-59).txt
txt里面含有关键字冲突的()里面的内容去掉吗
作者: ygqiang    时间: 2015-7-28 18:33

回复  ygqiang


    我可以理解为把:《重生之超级战舰》作者:彩虹之门(冲突_admin-pc-PC_2015-07-27 ...
尘丶 发表于 2015-7-28 18:31



对。。就是这样。。。

比如现在有2个文件。
000.txt
000(冲突_admin-pc-PC_2015-07-27 21-28-26).txt
作者: 尘丶    时间: 2015-7-28 18:39

回复 5# ygqiang


    @echo on&setlocal enabledelayedexpansion
for /f "tokens=1,2,3,4,5 delims=\.(" %%a in ('dir /s /b *.txt^|findstr "冲突"') do (
cd /d %%a\%%b
ren "%%c(%%d".%%e %%c.txt
)
pause
主要就是符号设置问题,你按照这个就这个做出来了。
先进入路径,有空格的地方就要引号,然后用分隔符隔开你要的去掉的地方。
作者: ygqiang    时间: 2015-7-28 21:02

回复  ygqiang


    @echo on&setlocal enabledelayedexpansion
for /f "tokens=1,2,3,4,5 delims=\. ...
尘丶 发表于 2015-7-28 18:39



    测试了下。。你给的这个代码。。。运行提示错误。。。
作者: ygqiang    时间: 2015-7-28 21:59

回复  ygqiang


    @echo on&setlocal enabledelayedexpansion
for /f "tokens=1,2,3,4,5 delims=\. ...
尘丶 发表于 2015-7-28 18:39



具体处理流程应该是:

起初要先搜索目录 判断文件名是否包含关键字  并记录下来路径
然后就是根据记录的路径删除同名文件 重命名含有关键字的文件
作者: ygqiang    时间: 2015-7-30 16:10

ding...........
作者: flyinnet9    时间: 2015-7-30 16:36

  1. @echo off
  2. set /p str=请输入搜索关键字:
  3. for /f "delims=" %%a in ('dir /a-d /b *.txt^|find "%str%"') do ren "%%a" %str%.txt
复制代码

作者: ygqiang    时间: 2015-7-30 16:43

flyinnet9 发表于 2015-7-30 16:36



    多谢。。。有2个问题。。
1、d盘不同目录下。类似文件的情况,有很多。。。而且文件名/文件扩展名,都不是固定的。。
2、你的代码。运行后生成2个文件。。冲突.txt和000.txt。。。跟要求不太一样。。具体要求看3楼说明。。。
作者: flyinnet9    时间: 2015-7-30 17:09

  1. @echo off
  2. for /f "tokens=1,2 delims=(" %%a in ('dir /a-d /b /s  *.txt') do ren "%%a(%%b" "%%~na.txt"
复制代码

作者: ygqiang    时间: 2015-7-30 17:12

flyinnet9 发表于 2015-7-30 17:09



    测试test.rar

用上面的测试。。没效果。。。
作者: flyinnet9    时间: 2015-7-30 17:30

000(冲突_admin-pc-PC_2015-07-27 21-28-26).txt
000(冲突_admin-pc-PC_2015-07-27 21-28-26).ppt
改成
000.txt
000.ppt
对不对??

如果是的话,麻烦测试的时候先删除000.txt和000.ppt
  1. @echo off
  2. for /f "tokens=1,2 delims=(" %%a in ('dir /a-d /b /s  *.*') do ren "%%a(%%b" "%%~na%%~xb"
复制代码

作者: ygqiang    时间: 2015-7-30 19:54

本帖最后由 ygqiang 于 2015-7-30 20:06 编辑
000(冲突_admin-pc-PC_2015-07-27 21-28-26).txt
000(冲突_admin-pc-PC_2015-07-27 21-28-26).ppt
改成
...
flyinnet9 发表于 2015-7-30 17:30



   
是这样。。。

如何修改代码。。
1、检索d盘下面所有子目录下的所有文件。
2、检索关键字为:(冲突
3、先删除已经存在的源文件。。。
再修改成源文件名。。
作者: flyinnet9    时间: 2015-7-31 09:22

本帖最后由 flyinnet9 于 2015-7-31 09:32 编辑

不知道你的“(”是半角还是全角,自己填吧
  1. @echo off
  2. for /f "tokens=1,2 delims=(" %%a in ('dir /a-d /b /s  d:\*.* ^|find "冲突"') do ren "%%a(%%b" "%%~na%%~xb"
复制代码

作者: ygqiang    时间: 2015-7-31 09:59

本帖最后由 ygqiang 于 2015-7-31 10:09 编辑
不知道你的“(”是半角还是全角,自己填吧
flyinnet9 发表于 2015-7-31 09:22



    多谢。。。如何修改下代码,实现:
判断如果存在源文件,就先删除源文件,再重命名。。
作者: WHY    时间: 2015-7-31 10:15

  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /s /a-d "*(冲突*).*"') do (
  3.     set "strName=%%~ni"
  4.     setlocal enabledelayedexpansion
  5.     for /f "delims=*" %%j in ("!strName:(冲突=*!") do (
  6.         endlocal
  7.         if exist "%%~dpi%%j%%~xi" move /y "%%i" "%%~dpi%%j%%~xi"
  8.     )
  9. )
  10. pause
复制代码

作者: flyinnet9    时间: 2015-7-31 10:32

本帖最后由 flyinnet9 于 2015-7-31 10:39 编辑

原来有
000(冲突_admin-pc-PC_2015-07-27 21-28-26).txt
000(冲突_admin-pc-PC_2015-07-27 21-28-26).ppt
000.txt
000.ppt
删除
000.txt
000.ppt

000(冲突_admin-pc-PC_2015-07-27 21-28-26).txt
000(冲突_admin-pc-PC_2015-07-27 21-28-26).ppt

000.txt
000.ppt
??
所以说,需求要讲清楚。。。
  1. @echo off
  2. for /f "tokens=1,2 delims=(" %%a in ('dir /a-d /b /s  d:\*.*^|find "冲突"') do (
  3. if exist "%%a%%~xb" del "%%a%%~xb"
  4. ren "%%a(%%b" "%%~na%%~xb"
  5. )
复制代码

作者: ygqiang    时间: 2015-7-31 11:18

WHY 发表于 2015-7-31 10:15



    多谢。。。

你这个代码也是好用的。。。如何修改下代码,实现:
搜索某个目录下所有的文件。。比如c:\test目录下。。
作者: ygqiang    时间: 2015-7-31 11:18

原来有
000(冲突_admin-pc-PC_2015-07-27 21-28-26).txt
000(冲突_admin-pc-PC_2015-07-27 21-28-26).ppt ...
flyinnet9 发表于 2015-7-31 10:32



    多谢。。测试了下。。好用。。。




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