Board logo

标题: [文本处理] 批处理重命名文件如何排除指定文件? [打印本页]

作者: surging    时间: 2016-2-20 15:54     标题: 批处理重命名文件如何排除指定文件?

比如,我在 D:\ 执行了下面的命令
  1. @for /r %%i in (*.bat) do @ren "%%i" "%%~ni.txt"
复制代码
这样会使D盘里所有的BAT文件变成TXT文件。但是,我不想把 D:\1\1.bat 和 D:\2\2.bat 这两个文件变成TXT文件,就是批处理时跳过这两个文件,怎么才能做到呢?
谢谢!
作者: ivor    时间: 2016-2-20 17:21

本帖最后由 ivor 于 2016-2-20 20:23 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /r %%i in (*.bat) do (
  3. set kill=0
  4. for /f %%a in ('type exclude.txt') do (
  5. if [%%~nxa] equ [%%~nxi] (set kill=1)
  6. )
  7. if !kill! equ 0 (rename "%%i" "%%~ni.txt")
  8. )
  9. pause
复制代码
  1. # python 3.5.1
  2. # coding:utf-8
  3. # by:ivor  bathome.net
  4. # 当前目录所有Bat文件更换后缀,例外字典ignoreFile
  5. import re, os
  6. ignoreFile = {"1.bat", "2.bat"}
  7. for file in os.listdir("."):
  8.     if file not in ignoreFile:
  9.         if file.endswith(".bat"):
  10.             os.rename(file, file.split(".")[0] + ".txt")
复制代码

作者: surging    时间: 2016-2-20 19:27

谢谢!
请问能用exclude排除吗?我将要排除的文件路径写在了exclude.txt里
@for /r %%i in (*.bat) do @ren "%%i" "%%~ni.txt" /exclude:exclude.txt
这个有问题,提示语法命令不正确。问题在哪呢?

假设我有100多个指定文件要拍除呢?

谢谢了,感激不尽
作者: surging    时间: 2016-2-20 19:38

回复 2# ivor


    谢谢,用exclude排除可以吗?
作者: ivor    时间: 2016-2-20 19:52

本帖最后由 ivor 于 2016-2-20 20:20 编辑

回复 4# surging

2楼  批处理代码 更新了,排除的文本保存为exclude.txt,放在批处理当前目录
作者: surging    时间: 2016-2-20 20:50

回复 5# ivor


    感谢,可是还差一点,Exclude.txt里的内容是:

然而其它目录下的“新建.bat”(都排除掉了)没有变成“新建.txt”
也就是说,我只想排除 1\新建.bat 和 2\新建.bat 这两个文件,而【不是】把所有名为“新建.bat”都排除掉。
作者: pcl_test    时间: 2016-2-20 22:00

举个例子
  1. @echo off
  2. echo;2\\新建.bat>排除.txt
  3. (
  4. echo;1\新建.bat
  5. echo;2\新建.bat
  6. )|findstr /vg:排除.txt
  7. pause
复制代码

作者: surging    时间: 2016-2-20 22:34

  1. @echo off&setlocal enabledelayedexpansion
  2. for /r %%i in (*.bat) do (
  3. set kill=0
  4. for /f %%a in ('type exclude.txt') do (
  5. if [%%~fxa] equ [%%~fxi] (set kill=1)
  6. )
  7. if !kill! equ 0 (rename "%%i" "%%~ni.txt")
  8. )
  9. pause
复制代码
回复 7# pcl_test


    代码如上,问题如下
作者: surging    时间: 2016-2-20 22:35

回复 7# pcl_test


    请问怎么破?谢谢!
作者: WHY    时间: 2016-2-20 22:56

  1. @echo off
  2. set "_D:\1\1.bat=a"
  3. set "_D:\2\2.bat=a"
  4. set "_D:\3\3.bat=a"
  5. for /f "delims=" %%i in ('dir /b /s /a-d D:\*.bat') do (
  6.     if /i not "%%i" == "%~f0" if not defined _%%i  ren "%%i" "%%~ni.txt"
  7. )
  8. pause
复制代码

作者: surging    时间: 2016-2-20 22:59

回复 10# WHY


    请问
set "_D:\1\1.bat=a"
set "_D:\2\2.bat=a"
set "_D:\3\3.bat=a"
这些是什么意思?谢谢
作者: WHY    时间: 2016-2-20 23:12

回复 11# surging


    把你需要排除的bat文件全名设置成一个变量名(前面加一个_字符)
作者: surging    时间: 2016-2-20 23:20

回复 12# WHY


    不过还是有问题,必须是完整路径。
若BAT文件与1.bat在同一个文件夹下那么【set "_D:\1\1.bat=a"】就可以改成【set "_1.bat=a"】
可是改了后就无效了,
【要求】不用完整路径(若BAT文件与要排除的1.bat文件在同目录下,直接将路径写成1.bat即可)
谢谢!
作者: ivor    时间: 2016-2-20 23:44

回复 13# surging


    建议用排除的文件名  ,从后面匹配完整的路径,今天就睡觉了
作者: WHY    时间: 2016-2-22 18:47

回复 13# surging


    不明白你想干什么,绝对路径有什么不妥?

相对路径也不能像你这样用的,'"1 1\新建.bat" 已经包含了 "1\新建.bat"




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