Board logo

标题: [文件操作] 批处理文件夹内操作的难题 [打印本页]

作者: maluwang    时间: 2021-7-9 09:47     标题: 批处理文件夹内操作的难题

例:
==================

儿歌技能(一)
儿歌技能(一)~1
儿歌技能(二)
儿歌技能(二)~1
儿歌技能(三)
儿歌技能(三)~1

==================

文件夹有多个文件(如上例)


第一问:想批量删除文件夹下所有不带 ~1的文件,留下带 ~1的文件。批处理该怎么写?
第二问:想批量修改带 ~1的文件名,去掉 ~1。批处理该怎么写?

谢谢大佬。
作者: qixiaobin0715    时间: 2021-7-9 12:48

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /a-d') do (
  4.     set "str=%%~na"
  5.     if not "%%a"=="%~nx0" (
  6.         if not "!str:~-2!" == "~1" (del "%%a") else ren "%%a" "!str:~,-2!%%~xa"
  7.     )
  8. )
  9. pause
复制代码

作者: maluwang    时间: 2021-7-9 13:17

回复 2# qixiaobin0715


    测试成功
但是误删了一些文件。
如何加一个保护机制,先检测文件夹内有没有 名字内有~1后缀的文件,如果有就执行。没有就不执行。
作者: qixiaobin0715    时间: 2021-7-9 15:39

回复 3# maluwang
你开始没说清楚,是这样的效果吗:
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /a-d^|findstr /v "~1"') do (
  3.     if exist "%%~na~1%%~xa" (
  4.         del "%%a"
  5.         ren "%%~na~1%%~xa" "%%a"
  6.     )
  7. )
  8. pause
复制代码

作者: maluwang    时间: 2021-7-9 20:37

回复 4# qixiaobin0715


    第二次的代码不如第一次的代码,第二次的代码有些~1删不干净
   麻烦大佬在第一次的代码基础上稍修改就行。


例:
==================

儿歌技能(一)
儿歌技能(一)~1
儿歌技能(二)
儿歌技能(二)~1
儿歌技能(三)
儿歌技能(三)~1

==================

文件夹有多个文件(如上例)

具体步骤是
检测文件夹下文件名末尾有没有带~1,如果没有就结束程序。如果有删除文件夹下所有不带 ~1的文件,留下带 ~1的文件。只剩下带~1的文件后修改带 ~1的文件名,去掉 ~1。
作者: qixiaobin0715    时间: 2021-7-9 22:36

回复 5# maluwang
第二个代码的思路是:
1.分别查找不带~1的文件
2.如果上面存在文件名+~1的文件,删除查找到的文件,然后将带~1的文件名改为被删除的文件的文件名。
出现没有被删除的原因可能是不像你例子中的情况:带有~1的文件名前一部分与查找到的文件名不一致。
作者: qixiaobin0715    时间: 2021-7-9 22:43

  1. @echo off
  2. if exist "*~1.*" (
  3.     setlocal enabledelayedexpansion
  4.     for /f "delims=" %%a in ('dir /b /a-d') do (
  5.         set "str=%%~na"
  6.         if not "%%a"=="%~nx0" (
  7.             if not "!str:~-2!" == "~1" (del "%%a") else ren "%%a" "!str:~,-2!%%~xa"
  8.         )
  9.     )
  10. )
  11. pause
复制代码
回复 5# maluwang
作者: jave000    时间: 2021-7-10 21:25

这个名称,看起来像是数据还原的
作者: maluwang    时间: 2021-7-11 12:12

回复 7# qixiaobin0715


    学习了,谢谢大佬。

再不耻下问,引发新的思考,如何单纯删除文件夹中带~1的文件呢 (单纯比对删除)
我修改过几次没有成功
作者: qixiaobin0715    时间: 2021-7-11 13:05

回复 9# maluwang
del "*~1.*"
作者: zhanglei1371    时间: 2021-7-11 14:17

为何不用totalcommander来完成呢?可以在可视化的界面里控制和操作。




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