标题: [文本处理] 批处理重命名文件如何排除指定文件? [打印本页]
作者: surging 时间: 2016-2-20 15:54 标题: 批处理重命名文件如何排除指定文件?
比如,我在 D:\ 执行了下面的命令- @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 编辑
- @echo off&setlocal enabledelayedexpansion
- for /r %%i in (*.bat) do (
- set kill=0
- for /f %%a in ('type exclude.txt') do (
- if [%%~nxa] equ [%%~nxi] (set kill=1)
- )
- if !kill! equ 0 (rename "%%i" "%%~ni.txt")
- )
- pause
复制代码
- # python 3.5.1
- # coding:utf-8
- # by:ivor bathome.net
- # 当前目录所有Bat文件更换后缀,例外字典ignoreFile
-
- import re, os
-
- ignoreFile = {"1.bat", "2.bat"}
- for file in os.listdir("."):
- if file not in ignoreFile:
- if file.endswith(".bat"):
- 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
举个例子- @echo off
- echo;2\\新建.bat>排除.txt
- (
- echo;1\新建.bat
- echo;2\新建.bat
- )|findstr /vg:排除.txt
- pause
复制代码
作者: surging 时间: 2016-2-20 22:34
- @echo off&setlocal enabledelayedexpansion
- for /r %%i in (*.bat) do (
- set kill=0
- for /f %%a in ('type exclude.txt') do (
- if [%%~fxa] equ [%%~fxi] (set kill=1)
- )
- if !kill! equ 0 (rename "%%i" "%%~ni.txt")
- )
- pause
复制代码
回复 7# pcl_test
代码如上,问题如下
作者: surging 时间: 2016-2-20 22:35
回复 7# pcl_test
请问怎么破?谢谢!
作者: WHY 时间: 2016-2-20 22:56
- @echo off
- set "_D:\1\1.bat=a"
- set "_D:\2\2.bat=a"
- set "_D:\3\3.bat=a"
-
- for /f "delims=" %%i in ('dir /b /s /a-d D:\*.bat') do (
- if /i not "%%i" == "%~f0" if not defined _%%i ren "%%i" "%%~ni.txt"
- )
- 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 |