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

[文件操作] 批处理文件夹内操作的难题

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

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

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

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


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

谢谢大佬。

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

TOP

回复 2# qixiaobin0715


    测试成功
但是误删了一些文件。
如何加一个保护机制,先检测文件夹内有没有 名字内有~1后缀的文件,如果有就执行。没有就不执行。

TOP

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

TOP

回复 4# qixiaobin0715


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


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

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

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

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

具体步骤是
检测文件夹下文件名末尾有没有带~1,如果没有就结束程序。如果有删除文件夹下所有不带 ~1的文件,留下带 ~1的文件。只剩下带~1的文件后修改带 ~1的文件名,去掉 ~1。

TOP

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

TOP

  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

TOP

这个名称,看起来像是数据还原的

TOP

回复 7# qixiaobin0715


    学习了,谢谢大佬。

再不耻下问,引发新的思考,如何单纯删除文件夹中带~1的文件呢 (单纯比对删除)
我修改过几次没有成功

TOP

回复 9# maluwang
del "*~1.*"

TOP

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

TOP

返回列表