无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 9701|回复: 26
打印 上一主题 下一主题

求个批量改名的bat

  [复制链接]
1#
发表于 2018-4-24 08:31:01 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-4-24 09:13 编辑

生成 随机文件名 用这个 ,怎么改名 啥的,再研究。
先看这个行不行

  1. Set os=CreateObject("Wscript.shell")
  2. wscript.echo namex
  3. Function namex()
  4.   str="a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9"
  5.         namex=""
  6.         Randomize   '初始化随机数生成器。
  7.         For n=1 To 16
  8.                 MyValue = Int(36 * Rnd+1)   ' 产生 1 到 36 之间的随机数。
  9.                 namex=namex&split(str,",")(myvalue-1)
  10.         Next
  11. end Function
复制代码


字母+数字 一共不过 36个 字符,循环16次,生成16个 1-36 的随机数,再转化成 对应的 字符,组合起来就是一个 符合要求的 字符串了。
回复

使用道具 举报

2#
发表于 2018-4-24 09:30:52 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-4-24 10:01 编辑

把 需要 操作的文件夹 拖放 给这个 vbs 就可以实现了。vbs 脚本旁边会 多出一个  change.txt 文件 就是 变更记录。

不处理 子目录 内容。


先将 目标文件夹 中的文件 名称存入一个 old.txt 文件,
在 循环读取  old.txt 内容,把 其包含的文件 更名,并将 更名过程写入 change.txt 文件中
脚本包含一个  随机生成  包含字符和数字的16位字符串 的函数。


  1. Set os=CreateObject("Wscript.shell")
  2. set fs=createobject("scripting.filesystemobject")

  3. If WScript.Arguments.Count=0 Then
  4.     wscirpt.echo "没有参数!"
  5.     wscirpt.quit
  6. End If

  7. pathx=fs.GetFile(WScript.scriptFullName).ParentFolder.Path
  8. Set dir0=fs.getfolder(WScript.Arguments(0))
  9. Set Change=fs.OpenTextFile(pathx&"\Change.txt",2,True)
  10. Set Old=fs.OpenTextFile(pathx&"\Old.txt",2,True)
  11. For Each p0 In dir0.Files
  12.   OLD.WriteLine p0.ParentFolder&""&p0.Name
  13. Next
  14. old.Close
  15. Set Old=fs.OpenTextFile(pathx&"\Old.txt",1,false)

  16. DO While old.AtEndOfStream <> True
  17.     Change_name=namex()
  18.     Do while fs.FileExists(change_name)=True
  19.             Change_name=namex()
  20.     Loop
  21.   Set p0=fs.GetFile(old.readline)
  22.   Change.WriteLine p0.ParentFolder&""&p0.Name&" , "&p0.ParentFolder&""&Change_name
  23.     fs.MoveFile p0,p0.ParentFolder&""&Change_name
  24. loop

  25. old.Close
  26. change.Close

  27. Function namex()
  28.   str="a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9"
  29.     namex=""
  30.     Randomize   '初始化随机数生成器。
  31.     For n=1 To 16
  32.         MyValue = Int(36 * Rnd+1)   ' 产生 0 到 35 之间的随机数。
  33.         'WScript.Echo myvalue
  34.         namex=namex&split(str,",")(myvalue-1)
  35.     Next
  36. end Function
复制代码

rnd.zip

803 Bytes, 下载次数: 5, 下载积分: 无忧币 -2

回复

使用道具 举报

3#
发表于 2018-4-24 10:05:03 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-4-24 10:10 编辑
窄口牛 发表于 2018-4-24 09:33
下标越界可能是vbs支持60随机,62就越界?
26+26+10是62


大小写 在 win 下是一样的 ,所以 36 就 够了。
我 刚弄了个脚本 ,应该是可行的。

通常 还是 不要把 脚本 放到 要处理 的文件夹中运行的。

vbs 中数组操作也要注意 ,个数 和 数组下标 不一致,差了一个
下标越界
应该是这个问题

For n = 1 To UBound(mArray)
应该改成
For n = 0 To UBound(mArray-1)
回复

使用道具 举报

4#
发表于 2018-4-24 10:26:11 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-4-24 10:35 编辑

改名

还原

存储 变更记录 的文件 ,新名 与 旧名 不应用  逗号 作为间隔符号,因为 逗号可以参与 文件命名,文件名中有逗号 就不好处理了,所以 应该用  /  这样不能用来 参与命名  的 字符 作为 两个文件名 间的隔断。


rnd.zip

1.27 KB, 下载次数: 12, 下载积分: 无忧币 -2

回复

使用道具 举报

5#
发表于 2018-4-25 11:47:26 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-4-26 10:42 编辑

这个是 cmd 版本 的 ,把 要处理的 目录 拖放给 rnd.cmd 就是 实现变更,并生成一个 记录文件。把记录文件 拖放给  un_rnd.cmd 就会还原变更。
支持子目录

rnd2.cmd
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. COLOR 0A

  4. if "%~1"=="" goto :eof
  5. set Change="%~dp0%date:/=.%_%time::=.%.txt"
  6. for /f "delims=" %%x  in ('dir /b /s /a-d "%~1"') do (
  7.   :rnd2
  8.     call :rnd1
  9.     if exist "%%~dpx""!l!" goto rnd2
  10.   :rnd2_end
  11. echo "%%x" -----^> "!l!"
  12. echo "%%~dpx"^|"%%~nxx"^|"!l!" >>!Change!
  13. ren "%%x" "!l!"
  14. )
  15. pause
  16. goto :eof

  17. :rnd1
  18. set "str=abcdefghijklmnopqrstuvwxyz0123456789"
  19. set "l="
  20. for /l %%c in (1,1,16) do (
  21.   set /a "r=!random!%%36"
  22.   for /l %%e in (0,1,35) do (if %%e equ !r!  set "l=!l!!str:~%%e,1!" )
  23. )
复制代码




[/code] rnd-cmd-1.2.zip (848 Bytes, 下载次数: 12)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-6 12:03

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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