标题: [文件操作] 批处理文件夹内操作的难题 [打印本页]
作者: maluwang 时间: 2021-7-9 09:47 标题: 批处理文件夹内操作的难题
例:
==================
儿歌技能(一)
儿歌技能(一)~1
儿歌技能(二)
儿歌技能(二)~1
儿歌技能(三)
儿歌技能(三)~1
==================
文件夹有多个文件(如上例)
第一问:想批量删除文件夹下所有不带 ~1的文件,留下带 ~1的文件。批处理该怎么写?
第二问:想批量修改带 ~1的文件名,去掉 ~1。批处理该怎么写?
谢谢大佬。
作者: qixiaobin0715 时间: 2021-7-9 12:48
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /a-d') do (
- set "str=%%~na"
- if not "%%a"=="%~nx0" (
- if not "!str:~-2!" == "~1" (del "%%a") else ren "%%a" "!str:~,-2!%%~xa"
- )
- )
- pause
复制代码
作者: maluwang 时间: 2021-7-9 13:17
回复 2# qixiaobin0715
测试成功
但是误删了一些文件。
如何加一个保护机制,先检测文件夹内有没有 名字内有~1后缀的文件,如果有就执行。没有就不执行。
作者: qixiaobin0715 时间: 2021-7-9 15:39
回复 3# maluwang
你开始没说清楚,是这样的效果吗:- @echo off
- for /f "delims=" %%a in ('dir /b /a-d^|findstr /v "~1"') do (
- if exist "%%~na~1%%~xa" (
- del "%%a"
- ren "%%~na~1%%~xa" "%%a"
- )
- )
- 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
- @echo off
- if exist "*~1.*" (
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /a-d') do (
- set "str=%%~na"
- if not "%%a"=="%~nx0" (
- if not "!str:~-2!" == "~1" (del "%%a") else ren "%%a" "!str:~,-2!%%~xa"
- )
- )
- )
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |