标题: [文本处理] 【已解决】BAT:保留不同文件夹内名称相同的文本 [打印本页]
作者: 思想之翼 时间: 2014-9-3 18:55 标题: 【已解决】BAT:保留不同文件夹内名称相同的文本
本帖最后由 思想之翼 于 2014-9-10 10:07 编辑
有下列文件夹及子文件夹:
d:\文本\文本1\001\lishi\
d:\文本\文本1\002\lishi\
...
d:\文本\文本1\210\lishi\
——————————————
d:\文本\文本2\001\lishi\
d:\文本\文本2\002\lishi\
...
d:\文本\文本2\210\lishi\
——————————————
上述lishi子文件夹内各有若干txt文本,名称格式为:
文件1-90克-温湿度
文件40-90克-温湿度
文件502-90克-温湿度
文件1000-90克-温湿度
欲:
在 d:\文本\文本2\001\lishi\内 删除文本, 仅保留 与d:\文本\文本1\001\lishi\内 有相同名称的txt文本
在 d:\文本\文本2\002\lishi\内 删除文本, 仅保留 与d:\文本\文本1\002\lishi\内 有相同名称的txt文本
...
在 d:\文本\文本2\210\lishi\内 删除文本, 仅保留 与d:\文本\文本1\210\lishi\内 有相同名称的txt文本
这样的代码如何写?
参考:以下是在 d:\文本\文本2\的\lishi\内 删除 与d:\文本\文本1\的\lishi\内 有相同名称的txt文本- @echo off & setlocal enabledelayedexpansion
- set "re=\\lishi\\文件[1-9][0-9]*[^\\]*\.txt"
- pushd "D:\文本\文本1\"
- (for /f "delims=" %%a in ('dir /a-d/b/s^|findstr /ie "%re%"') do (
- set "file=%%a"
- del "!file:D:\文本\文本1\=D:\文本\文本2\!"
- )) 2>nul
- exit
复制代码
作者: DAIC 时间: 2014-9-3 22:39
下述代码第6行: del "!file:\文本\文本1\=D:\文本\文本2\!"
不等于:如何表示?
那是字符串替换的语法
跟等于、不等于没有关系
作者: apang 时间: 2014-9-4 00:14
- @echo off & setlocal enabledelayedexpansion
- pushd "D:\文本\文本2\"
- for /d /r %%a in (lishi?) do (
- if /i "%%~nxa" == "lishi" (
- for /f "delims=" %%b in ('dir /a-d /b "%%a\文件*.txt"') do (
- set "f=%%a\%%b"
- set "f=!f:D:\文本\文本2\=D:\文本\文本1\!"
- if not exist "!f!" echo,del "%%a\%%b"
- )
- )
- )
- pause
复制代码
作者: 思想之翼 时间: 2014-9-4 00:55
回复 3# apang
感谢您的帮助!
经过测试,代码有误。
请见附件:
/文本1/001/lishi/ 与 /文本2/001/lishi/ 中 只有名称为”文件1000-90克-温湿度“的txt相同,则需要删除/文本2/001/lishi/ 中 名称为 ”文件1-90克-温湿度“、”文件10-90克-温湿度“的txt,保留名称为”文件1000-90克-温湿度“的txt
作者: apang 时间: 2014-9-4 11:31
回复 4# 思想之翼
我这里测试没问题,是不是没有删掉del前的echo?
顶楼代码这样改,试试:- @echo off & setlocal enabledelayedexpansion
- set "re=\\lishi\\文件[1-9][0-9]*[^\\]*\.txt"
- pushd "D:\文本\文本2\"
- for /f "delims=" %%a in ('dir /a-d/b/s^|findstr /ie "%re%"') do (
- set "file=%%a"
- set "file=!file:D:\文本\文本2\=D:\文本\文本1\!"
- if not exist "!file!" echo del "%%a"
- )
- pause
复制代码
作者: 思想之翼 时间: 2014-10-13 05:03
回复 3# apang
感谢您的帮助,代码完美解决了问题。
实际运用中,由于文件夹名称发生了变化,试图改写代码,未果。还望继续得到您的帮助。
原来文件夹名称如下:
d:\文本\文本1\001\lishi\
d:\文本\文本1\002\lishi\
...
d:\文本\文本1\210\lishi\
——————————————
d:\文本\文本2\001\lishi\
d:\文本\文本2\002\lishi\
...
d:\文本\文本2\210\lishi\
——————————————
改变文件夹名称如下:
d:\文本\文本1\数据1_001\lishi\
d:\文本\文本1\数据1_002\lishi\
...
d:\文本\文本1\数据1_210\lishi\
——————————————
d:\文本\文本2\数据2_001\lishi\
d:\文本\文本2\数据2_002\lishi\
...
d:\文本\文本2\数据2_210\lishi\
——————————————
下述代码如何相应改写?- @echo off & setlocal enabledelayedexpansion
- pushd "D:\文本\文本2\"
- for /d /r %%a in (lishi?) do (
- if /i "%%~nxa" == "lishi" (
- for /f "delims=" %%b in ('dir /a-d /b "%%a\*.txt"') do (
- set "f=%%a\%%b"
- set "f=!f:D:\文本\文本2\=D:\文本\文本1\!"
- if not exist "!f!" ,del "%%a\%%b"
- )
- )
- )
- exit
复制代码
作者: apang 时间: 2014-10-13 11:23
回复 6# 思想之翼 - set "f=!f:D:\文本\文本2\数据2_=D:\文本\文本1\数据1_!"
复制代码
作者: aibooby 时间: 2014-11-28 13:58
我也有同样的问题,但是我没有基础!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |