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

[文本处理] 【已解决】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文本
  1. @echo off & setlocal enabledelayedexpansion
  2. set "re=\\lishi\\文件[1-9][0-9]*[^\\]*\.txt"
  3. pushd "D:\文本\文本1\"
  4. (for /f "delims=" %%a in ('dir /a-d/b/s^|findstr /ie "%re%"') do (
  5.     set "file=%%a"
  6.     del "!file:D:\文本\文本1\=D:\文本\文本2\!"
  7. )) 2>nul
  8. exit
复制代码

我也有同样的问题,但是我没有基础!

TOP

回复 6# 思想之翼
  1. set "f=!f:D:\文本\文本2\数据2_=D:\文本\文本1\数据1_!"
复制代码
1

评分人数

TOP

回复 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\
——————————————

下述代码如何相应改写?
  1. @echo off & setlocal enabledelayedexpansion
  2. pushd "D:\文本\文本2\"
  3. for /d /r %%a in (lishi?) do (
  4.     if /i "%%~nxa" == "lishi" (
  5.         for /f "delims=" %%b in ('dir /a-d /b "%%a\*.txt"') do (
  6.             set "f=%%a\%%b"
  7.             set "f=!f:D:\文本\文本2\=D:\文本\文本1\!"
  8.             if not exist "!f!" ,del "%%a\%%b"
  9.         )
  10.     )
  11. )
  12. exit
复制代码

TOP

回复 4# 思想之翼


    我这里测试没问题,是不是没有删掉del前的echo?
顶楼代码这样改,试试:
  1. @echo off & setlocal enabledelayedexpansion
  2. set "re=\\lishi\\文件[1-9][0-9]*[^\\]*\.txt"
  3. pushd "D:\文本\文本2\"
  4. for /f "delims=" %%a in ('dir /a-d/b/s^|findstr /ie "%re%"') do (
  5.     set "file=%%a"
  6.     set "file=!file:D:\文本\文本2\=D:\文本\文本1\!"
  7.     if not exist "!file!" echo del "%%a"
  8. )
  9. pause
复制代码
1

评分人数

TOP

回复 3# apang

感谢您的帮助!
经过测试,代码有误。
请见附件:
/文本1/001/lishi/  与  /文本2/001/lishi/  中   只有名称为”文件1000-90克-温湿度“的txt相同,则需要删除/文本2/001/lishi/  中 名称为 ”文件1-90克-温湿度“、”文件10-90克-温湿度“的txt,保留名称为”文件1000-90克-温湿度“的txt

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. pushd "D:\文本\文本2\"
  3. for /d /r %%a in (lishi?) do (
  4.     if /i "%%~nxa" == "lishi" (
  5.         for /f "delims=" %%b in ('dir /a-d /b "%%a\文件*.txt"') do (
  6.             set "f=%%a\%%b"
  7.             set "f=!f:D:\文本\文本2\=D:\文本\文本1\!"
  8.             if not exist "!f!" echo,del "%%a\%%b"
  9.         )
  10.     )
  11. )
  12. pause
复制代码
1

评分人数

TOP

下述代码第6行: del "!file:\文本\文本1\=D:\文本\文本2\!"
不等于:如何表示?

那是字符串替换的语法
跟等于、不等于没有关系

TOP

返回列表