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

[文本处理] 【已解决】批处理怎样按一定规则重命名文件(包含子文件夹)?

[复制链接]
 楼主| 发表于 2014-5-4 11:34:27 | 显示全部楼层
回复 8# terse


    不会的,确定只有一组 两位 数字...
发表于 2014-5-5 22:35:55 | 显示全部楼层
遗憾的是都一闪而过,没能达成要求...,顺带一提,系统是win7 64位 旗舰版...


遗憾的是你一点都不会,找找自身的原因吧,要么复制粘贴有问题,要么保存bat时编码有问题

本想改改顶楼vbs代码,估计给你也白搭,算了吧
发表于 2014-5-6 00:11:36 | 显示全部楼层
同上,估计是楼主保存成 unicode 了吧?这么多代码不至于一个都不能用
发表于 2014-5-7 02:14:58 | 显示全部楼层
回复 1# ZeronoFreya
这样试下呢?
无64位环境测试  请自行备份数据
  1. @if(0)==(0) echo off
  2. set "Sysdir=SysWOW64"
  3. if /i "%PROCESSOR_ARCHITECTURE%" == "x86" if not defined PROCESSOR_ARCHITEW6432 set "Sysdir=System32"
  4. set cscript="%Windir%\%Sysdir%\cscript.exe" //nologo //e:javascript
  5. if "%~1" == "" (set "ph=%~dp0") else set "ph=%~1"
  6. for /f "delims=" %%i in ('dir/b/s "%ph%*[*]*.txt"^|%cscript% "%~f0"')do (
  7.     echo,Ren %%i 2>nul
  8. )
  9. pause
  10. goto :eof
  11. @end
  12. while (!WScript.StdIn.AtEndOfStream) {
  13.     var f = WScript.StdIn.ReadLine()
  14.     var arr = f.match(/(\[(\d{2})\])/)
  15.     if (arr) WScript.echo('"' + f + '"','"' + arr[2] + '.txt"');
  16. }
复制代码
 楼主| 发表于 2014-5-7 15:40:22 | 显示全部楼层
回复 19# terse


    Ren "D:\system\Desktop\test\test\dgtsts[02]fhjfcct.mp4.mp4" "02.mp4"
Ren "D:\system\Desktop\test\test\sdgdd[01]fdtgs.mp4" "01.mp4"
请按任意键继续. . .


感谢,但还是不成功。

我不懂编程,但感觉我的要求应该不是很难...没想到有这么多人帮助还是不行,这时候放弃也是不错的选择,再一次,感谢大家的帮助!!
发表于 2014-5-7 16:16:27 | 显示全部楼层
回复 20# ZeronoFreya


    大哥,你得把 Ren 前的那个 echo 去掉,他那是为了显示出来让你看看是否正确,确认无误后去掉 echo 再进行实际的改名操作
发表于 2014-5-7 18:39:46 | 显示全部楼层
回复 20# ZeronoFreya
上面显示表明代码可正常运行
如要统配后缀可以改下这样试
虽然楼主放弃了 还是贴出吧
  1. @if(0)==(0) echo off
  2. set "Sysdir=SysWOW64"
  3. if /i "%PROCESSOR_ARCHITECTURE%" == "x86" if not defined PROCESSOR_ARCHITEW6432 set "Sysdir=System32"
  4. set cscript="%Windir%\%Sysdir%\cscript.exe" //nologo //e:javascript
  5. if "%~1" == "" (set "ph=%~dp0") else set "ph=%~1"
  6. for /f "delims=" %%i in ('dir/b/s "%ph%*[*]*.*"^|%cscript% "%~f0"')do Ren %%i 2>nul
  7. pause
  8. goto :eof
  9. @end
  10. while (!WScript.StdIn.AtEndOfStream) {
  11.     var f = WScript.StdIn.ReadLine()
  12.     var e =/\.[^\.]+$/.exec(f);
  13.     var arr = f.match(/(\[(\d{2})\])/)
  14.     if (arr) WScript.echo('"' + f + '"','"' + arr[2] + e + '"');
  15. }
复制代码
发表于 2014-5-7 19:31:14 | 显示全部楼层
修改自 9 楼 apang 胸的代码:代码会短一些,但可读性其实很差
CrLf 发表于 2014-5-4 02:46



    “apang胸”
发表于 2014-5-7 19:51:01 | 显示全部楼层
本帖最后由 PakTC 于 2014-5-7 20:06 编辑


重命名这种事情要是没有特殊控制字符干嘛要用vbs?

回复 14# CrLf
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (1,1,99) do (
  4.     set sn=0%%a
  5.     set sn=!sn:~-2!
  6.     if exist *[!sn!]*.txt (
  7.         call :next *[!sn!]*.txt !sn!
  8.     )
  9. )
  10. echo 修改之后的文件列表:
  11. dir /b *.txt
  12. pause
  13. exit

  14. :next
  15. echo "%~f1"
  16. ren "%~f1" !sn!.txt
复制代码
输出结果
"C:\新建文件夹\###[01]#####.txt"
"C:\新建文件夹\复件 ###[02]#####.txt"
"C:\新建文件夹\复件 (3) ###[03]#####.txt"
"C:\新建文件夹\复件 (2) ###[04]#####.txt"
修改之后的文件列表:
01.txt
02.txt
03.txt
04.txt

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 骚年有想法

查看全部评分

发表于 2014-5-7 20:32:29 | 显示全部楼层
回复 24# PakTC


    楼主要求有这一项:
(包含子文件夹)
发表于 2014-5-8 09:45:29 | 显示全部楼层
回复 25# CrLf


不要做拖放了,用vbs循环访问剪切板中的信息。当出现目录的时候,对该目录进行重命名操作。
这样就只要在指定目录按ctrl+c就可以执行操作了。
发表于 2014-5-8 12:48:07 | 显示全部楼层
本帖最后由 523066680 于 2014-5-8 12:51 编辑

回复 1# ZeronoFreya

按楼主的代码添加了一部分东西,保存为vbs即可,WIN7 64位,测试过

[size=1.1em]if wscript.arguments.count=0 then
   createobject("wscript.shell").run _
   "cmd /c cscript //nologo " &chr(34) &wscript.scriptname &chr(34) & " isme"
   wscript.quit
end if

set OUT=wscript.stdout
set INP=wscript.stdin
OUT.write "拖放需要改名的文件夹到此处:"
fold=INP.readline

'以下是楼主的代码
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each File in FSO.GetFolder(fold).Files
   Ext = FSO.GetExtensionName(File)
   If LCase(Ext) = "txt" Or LCase(Ext) = "doc" Or LCase(Ext) = "ass" Then RenFiles
Next
MsgBox "OK"

Sub RenFiles()
   Set Re = New RegExp
   Re.Pattern = "(^.*\[)(\d{2})(\].*$)"
   Re.Global = True
   File.Name = Re.Replace(File.Name,"$2") & "." & Ext
End Sub
 楼主| 发表于 2014-5-8 16:25:37 | 显示全部楼层
回复 24# PakTC


    没想到放弃后会出现满意结果,不能处理子文件夹也可以了,嗯,非常满意了,非常感谢!!
 楼主| 发表于 2014-5-8 16:30:31 | 显示全部楼层
回复 21# CrLf


    惭愧,如楼上所说,我不懂批处理,看到文件夹内内容未变,就果断认为失败了...惭愧!!
 楼主| 发表于 2014-5-8 16:34:22 | 显示全部楼层
回复 27# 523066680


    感谢,我决定用PakTC的批处理了,放到文件夹根目录下效果很不错,再次感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 01:32 , Processed in 0.024664 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表