返回列表 发帖
本帖最后由 tmplinshi 于 2011-6-18 15:14 编辑
@echo off
setlocal disabledelayedexpansion
set "str_old=印刷"
set "str_new=电子"
set "drive=c d e f g h i j k l m n o p q r s t u v w x y z"
for %%d in (%drive%) do (
    if exist %%d: (
        echo 正在处理 %%d 盘...
        for /f "delims=" %%f in (' dir /a /b /s "%%d:\*%str_old%*" ') do (
            set fpath=%%~dpf
            set fname=%%~nxf
            setlocal enabledelayedexpansion
            set "fpath=!fpath:%str_old%=%str_new%!"
            set "fname_new=!fname:%str_old%=%str_new%!"
            ren "!fpath!!fname!" "!fname_new!" || (
                rem 为了处理“隐藏”和“系统”属性的文件(夹)
                for %%f in ("!fpath!!fname!") do (
                    set a=%%~af
                    if "!a:h=!" neq "!a!" set a=!a! -h
                    if "!a:s=!" neq "!a!" set a=!a! -s
                    set a=!a:* =!
                    attrib !a! "!fpath!!fname!"
                    ren "!fpath!!fname!" "!fname_new!"
                    attrib !a:-=+! "!fpath!!fname_new!"
                )
            )
            endlocal
        )
    )
) 2>nul
pauseCOPY
1

评分人数

TOP

本帖最后由 tmplinshi 于 2011-6-18 15:15 编辑
cmd /q /vn /c for /f "delims=" %%a in ('dir /s /a /b *印刷.*') do set "tmp=%%~nxa"^&ren "%%a" "!tmp:印刷=电子!"
zm900612 发表于 2011-6-18 13:09

存在好多问题:

1. 最主要的问题是,如果路径是:
    c:\印刷
    c:\印刷\印刷2.txt
把“c:\印刷”变成“c:\电子”后,“c:\印刷\印刷2.txt”就不存在了。

2. 没有处理所有分区。

3. dir /a 列出了所有属性的文件(夹),而 ren 不能重命名含有“隐藏”和“系统”属性的文件(夹)。

4. 没有处理半角感叹号。

5. “dir /s /a /b *印刷.*”,文件名不一定有“.”。

TOP

本帖最后由 tmplinshi 于 2011-6-18 16:25 编辑
5# tmplinshi  

第一个问题不存在,因为我用的是:set "tmp=%%~nxa"
其他问题确实存在
zm900612 发表于 2011-6-18 15:57


存在的。

c:\印刷
c:\印刷\印刷2.txt

c:\印刷 → c:\电子
c:\印刷\印刷2.txt → c:\印刷\电子2.txt (这一步就会出错,因为“c:\印刷”已经在上一次重命名时,改成了“c:\电子”。)

TOP

本帖最后由 tmplinshi 于 2011-6-18 17:00 编辑
for /f "delims=" %%a in ('dir /s /a-d /b^&dir /s /ad /b') do (
        endlocal
        set "tmp=%%~nxa"
        set f="%%~sa"
        setlocal enabledelayedexpansion
        ren "!f!" "!tmp:印刷=电子!"
)
zm900612 发表于 2011-6-18 16:12


仍然会出错:

...前面的文件处理正确。下面开始是目录...
c:\印刷
c:\印刷\1\印刷

TOP

返回列表