[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理重命名文件如何排除指定文件?

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

评分人数

本帖最后由 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")
复制代码
1

评分人数

    • surging: 还差一点,有问题,问题在6楼技术 + 1
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

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

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

谢谢了,感激不尽

TOP

回复 2# ivor


    谢谢,用exclude排除可以吗?

TOP

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

回复 4# surging

2楼  批处理代码 更新了,排除的文本保存为exclude.txt,放在批处理当前目录
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 5# ivor


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

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

TOP

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

TOP

  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


    代码如上,问题如下

TOP

回复 7# pcl_test


    请问怎么破?谢谢!

TOP

  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
复制代码

TOP

回复 10# WHY


    请问
set "_D:\1\1.bat=a"
set "_D:\2\2.bat=a"
set "_D:\3\3.bat=a"
这些是什么意思?谢谢

TOP

回复 11# surging


    把你需要排除的bat文件全名设置成一个变量名(前面加一个_字符)

TOP

回复 12# WHY


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

TOP

回复 13# surging


    建议用排除的文件名  ,从后面匹配完整的路径,今天就睡觉了
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 13# surging


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

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

TOP

返回列表