|  | 
 
| kennyfan 中级用户
 
    
 
 
 积分 259
 发帖 112
 注册 2006-9-18
 状态 离线
 | 
| 『楼 主』:
 [已结] 如何用批处将d盘里的所有扩展名为zip改为faz
 
使用 LLM 解释/回答一下 
 
 
如何用批处将d盘里的所有扩展名为zip改为faz系统文件和隐藏文件都要改掉
 
 (原因:某病毒程序恶意修改exe  dll zip rar等文件经杀毒后不能恢复 另本人损失惨重! 为避免下次同样事情再次发生所以还请朋友们帮帮手!)
 
 Last edited by kennyfan on 2006-10-15 at 01:25 ]
 
 
 
 
 |  | 
|  2006-10-15 00:11 |  | 
|  | 
 
| namejm 荣誉版主
 
        batch fan
 
 
 积分 5226
 发帖 1737
 注册 2006-3-10
 来自 成都
 状态 离线
 | 
| 『第 2 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
  如果要连系统文件和隐藏文件都要改的话,就得先做去系统和隐藏属性的操作。请先测试下面的代码,如果成功了把 echo 改为 ren: @echo off
 for /f "delims=" %%i in ('dir /a-d /b /s d:\*.zip') do (
 attrib -s -h "%%i" 2>nul
 echo "%%i" "%%~ni.faz"
 )
 
 
 Last edited by namejm on 2006-10-15 at 01:15 ]
 
 
 
 
 |  
                  |  尺有所短,寸有所长,学好CMD没商量。
 考虑问题复杂化,解决问题简洁化。
 |  | 
|  2006-10-15 01:11 |  | 
|  | 
 
| pengfei 银牌会员
 
      
 
 
 积分 1218
 发帖 485
 注册 2006-7-21
 来自 湖南.娄底
 状态 离线
 | 
| 『第 3 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
重命名D盘所有ZIP文件为faz后缀, 要改回来请互换后缀名. @echo off
 set num=0
 setlocal enabledelayedexpansion
 for /f "tokens=*" %%i in ('dir /s /a-d /b d:\*.zip') do (
 set /a num+=1
 ren "%%i" %%~ni.faz
 )
 echo 一共重命名文件:%num%个
 pause
 
 
 Last edited by pengfei on 2006-10-15 at 01:38 ]
 
 
 
 |  | 
|  2006-10-15 01:12 |  | 
|  | 
 
| kennyfan 中级用户
 
    
 
 
 积分 259
 发帖 112
 注册 2006-9-18
 状态 离线
 | 
| 『第 4 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
先谢谢namejm兄  这样好像是可行, 不过改了之后以前的系统文件跟隐藏文件就全部显示出来了!再想变为系统跟隐藏就比较麻烦! 
 
 
 
 |  | 
|  2006-10-15 01:14 |  | 
|  | 
 
| namejm 荣誉版主
 
        batch fan
 
 
 积分 5226
 发帖 1737
 注册 2006-3-10
 来自 成都
 状态 离线
 | 
| 『第 5 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
  但是我那段代码只会修改.zip文件的系统和隐藏属性啊。如果要还原以前的属性的话,看来得做个保存文件属性的子程序,修改完之后再恢复。这个pengfei很擅长,你问他要代码吧。呵呵。 
 
 
 
 
 |  
                  |  尺有所短,寸有所长,学好CMD没商量。
 考虑问题复杂化,解决问题简洁化。
 |  | 
|  2006-10-15 01:18 |  | 
|  | 
 
| kennyfan 中级用户
 
    
 
 
 积分 259
 发帖 112
 注册 2006-9-18
 状态 离线
 | 
| 『第 6 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
pengfei兄的厉害啊...问题解决了!~
 非常感谢两位帮忙!
 
 Last edited by kennyfan on 2006-10-15 at 01:26 ]
 
 
 
 
 |  | 
|  2006-10-15 01:20 |  | 
|  | 
 
| pengfei 银牌会员
 
      
 
 
 积分 1218
 发帖 485
 注册 2006-7-21
 来自 湖南.娄底
 状态 离线
 | 
|     『第 7 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
真的假的, 隐藏属性还没解决呢? 其实关于对文件进行属性操作后恢复原有属性在namejm兄的文件备份器里就有这样的代码, 写了一段: @echo off
 set num=0
 setlocal enabledelayedexpansion
 for /f "tokens=*" %%i in ('dir /s /a-d /b d:\*.zip') do (
 set attrib=%%~ai
 attrib -s -h -r "%%i"
 ren "%%i" "%%~ni.faz"
 set /a num+=1
 set note=
 if not "!attrib:~1,1!"=="-" set note=!note!+!attrib:~1,1!
 if not "!attrib:~3,1!"=="-" set note=!note!+!attrib:~3,1!
 if not "!attrib:~4,1!"=="-" set note=!note!+!attrib:~4,1!
 if not "!note!"=="" attrib !note!"%%~dpni.faz"
 )
 echo 一共重命名文件:%num%个
 pause
 
 
 Last edited by pengfei on 2006-10-15 at 02:13 ]
 
 
 
 
 
 |  | 
|  2006-10-15 01:38 |  | 
|  | 
 
| kennyfan 中级用户
 
    
 
 
 积分 259
 发帖 112
 注册 2006-9-18
 状态 离线
 |  | 
|  2006-10-15 01:44 |  | 
|  | 
 
| pengfei 银牌会员
 
      
 
 
 积分 1218
 发帖 485
 注册 2006-7-21
 来自 湖南.娄底
 状态 离线
 | 
| 『第 9 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
试试7楼的代码, 可以重命名系统隐藏属性的ZIP文件, 而又不改变ZIP文件原有的属性. @echo off
 set num=0
 setlocal enabledelayedexpansion
 for /f "tokens=*" %%i in ('dir /s /a-d /b d:\*.faz') do (
 set attrib=%%~ai
 attrib -s -h -r "%%i"
 ren "%%i" "%%~ni.rar"
 set /a num+=1
 set note=
 if not "!attrib:~1,1!"=="-" set note=!note!+!attrib:~1,1!
 if not "!attrib:~3,1!"=="-" set note=!note!+!attrib:~3,1!
 if not "!attrib:~4,1!"=="-" set note=!note!+!attrib:~4,1!
 if not "!note!"=="" attrib !note!"%%~dpni.rar"
 )
 echo 一共重命名文件:%num%个
 pause
 
 
这一段是恢复文件为zip的, 不防互相转换玩一玩. 看文件属性有没有改变.
 
 Last edited by pengfei on 2006-10-15 at 02:13 ]
 
 
 
 |  | 
|  2006-10-15 01:52 |  | 
|  | 
 
| kennyfan 中级用户
 
    
 
 
 积分 259
 发帖 112
 注册 2006-9-18
 状态 离线
 | 
| 『第 10 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
哇....哈哈........搞掂~~ 虽然问题解决了..可是还是看不明白两除地方
 setlocal enabledelayedexpansion
 
 if not "!note!"=="" attrib !note!"%%~dpni.rar"  里的dpni 是什么意思?
 
 
 
 
 |  | 
|  2006-10-15 01:59 |  | 
|  | 
 
| redtek 金牌会员
 
       
 
 
 
 积分 2902
 发帖 1147
 注册 2006-9-21
 状态 离线
 | 
| 『第 11 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
这病毒利害,连RAR都修改…… 
 
 
 
 
 |  
                  |  Redtek,一个永远在网上流浪的人……
 
 _.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
 |  | 
|  2006-10-15 02:39 |  | 
|  | 
 
| GOTOmsdos 铂金会员
 
        C++启程者
 
 
 积分 5154
 发帖 1827
 注册 2003-7-18
 状态 离线
 | 
|  『第 12 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
我给个更简单的:(不用 tokens 、 delims)
 但是不能解决保留文件原属性。如果要恢复原先的文件属性,就还要预先作个BAT来保存,以便后面还原的。
 
 
 @echo off
 rem 如果采用相对路径方式:
 d:
 cd\
 for /r %%a in (*.zip) do if exist %%a attrib -s -r -h %%a && rename %%a *.faz
 
 
 rem 如果采用绝对路径方式:
 rem for /r d: /d %%a in (.) do if exist %%a\*.zip attrib -s -r -h %%a\*.zip && rename %%a\*.zip *.faz
 
 测试通过
 
 Last edited by GOTOmsdos on 2006-10-15 at 04:01 ]
 
 
 
 
 
 
 |  | 
|  2006-10-15 03:58 |  | 
|  | 
 
| pengfei 银牌会员
 
      
 
 
 积分 1218
 发帖 485
 注册 2006-7-21
 来自 湖南.娄底
 状态 离线
 | 
| 『第 13 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
GOTOmsdos的代码的确更简单, 但是有缺陷, 就是无法找到系统隐藏属性的文件. 而且不能保持文件的原有属性.
 另外发现如果路径带空格就执行错误, 必须把%%a用引号括起来.
 
 Last edited by pengfei on 2006-10-15 at 08:27 ]
 
 
 
 
 |  | 
|  2006-10-15 08:24 |  | 
|  | 
 
| GOTOmsdos 铂金会员
 
        C++启程者
 
 
 积分 5154
 发帖 1827
 注册 2003-7-18
 状态 离线
 | 
| 『第 14 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
1我已试过,if exist 对系统隐藏属性的文件是照样处理的
 2
 没试过代间隔的的文件
 
 
 
 
 |  | 
|  2006-10-15 10:44 |  | 
|  | 
 
| namejm 荣誉版主
 
        batch fan
 
 
 积分 5226
 发帖 1737
 注册 2006-3-10
 来自 成都
 状态 离线
 | 
| 『第 15 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
Originally posted by GOTOmsdos at 2006-10-15 10:44:1
 我已试过,if exist 对系统隐藏属性的文件是照样处理的
 
 
  虽然单独的 if exist 语句可以探测到系统或隐藏文件,但是,用在 for 复合语句中,情况就大不一样了。在你的代码中,是先用 for 循环来探测zip文件,然后再用 if exist 来判断是否存在,而单独的for语句是没法探测到隐藏文件的,所以后面的 if exist 同样不会探测到隐藏文件。另外,if exist 语句在这个for语句中属于重复语句,可以去掉。 
 
 
 
 
 |  
                  |  尺有所短,寸有所长,学好CMD没商量。
 考虑问题复杂化,解决问题简洁化。
 |  | 
|  2006-10-16 12:18 |  |