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

[文本处理] [已解决]对应Excel字符串批量修改文件名

本帖最后由 huyoyoo 于 2011-6-3 19:17 编辑

现有一文件夹下有大量订单,文件名如下:1001a.as,1002a.as,1101a.as,1102a.as,1305a.as,1412a.as……
另有一个表格: a.xls     其中
A         B
10    北京
11    武汉
12    上海
13    广州
14    深圳
……  ……

要求进过批处理后,文件名称为 :北京01a.as,北京02a.as,武汉01a.as,武汉02a.as,广州05a.as,深圳12a.as…


请各位大虾指教
1

评分人数

    • zm900612: 感谢给帖子标题标注[已解决]字样PB + 2

楼主是不是所有的定单名字都是固定的前四位是数字呢?

如果不是还请楼主描述清楚划分规则,如出现11111a.as这样的情况是武汉的第111张定单还是别的城市的第11张定单?
***共同提高***

TOP

本帖最后由 huyoyoo 于 2011-6-1 17:15 编辑
楼主是不是所有的定单名字都是固定的前四位是数字呢?

如果不是还请楼主描述清楚划分规则,如出现11111a.as这样的情况是武汉的第111张定单还是别的城市的第11张定单?
batman 发表于 2011-6-1 16:19


是的,位数是固定,我实际订单是12位的,前六位是代表城市编码,后六位是流水号,上述例子中前2位是城市编码,后三位是流水号。

TOP

本帖最后由 tmplinshi 于 2011-6-1 20:10 编辑

下载以下两个工具,解压至批处理所在目录:

    doctotxt (http://sourceforge.net/projects/ ... 32.tar.bz2/download)
    iconv (http://bbs.bathome.net/thread-10861-1-2.html)
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. cd /d "%~dp0"
  4. rem 设置路径
  5. set xls="d:\a.xls"
  6. set "folder=d:\含 as 文件的文件夹路径"
  7. rem 也可以直接把“含 as 文件的文件夹”拖到批处理图标上
  8. if "%~1" neq "" set "folder=%~1"
  9. for /f "tokens=1,2" %%a in ('"doctotext %xls% 2>nul | iconv -f utf-8"') do (
  10.     for %%i in ("%folder%\%%a*.as") do (
  11.         set str=%%i
  12.         ren "%%i" "%%b!str:*%%a=!"
  13.     )
  14. )
  15. pause
复制代码

TOP

楼上的用不了啊

TOP

本帖最后由 tmplinshi 于 2011-6-1 19:41 编辑

5# huyoyoo

设置了这两个路径吗?
rem 设置路径
set xls="d:\a.xls"
set "folder=d:\含 as 文件的文件夹路径"


--------------
批处理所在目录必须有以下文件:
ChangeLog
doctotext.exe
libgcc_s_sjlj-1.dll
libglib-2.0-0.dll
libgobject-2.0-0.dll
libgsf-1-114.dll
libiconv-2.dll
libintl-8.dll
libxml2-2.dll
VERSION
iconv.exe
libcharset1.dll
libiconv2.dll
libintl3.dll

-----------------------
4 楼的代码修改了一个小地方,你再试试。

TOP

本帖最后由 batman 于 2011-6-1 21:50 编辑

vbs版(对应的是12位编码)
  1. Dim oexcel, vbstr
  2. Set oexcel = CreateObject("excel.application")
  3. Set ws = CreateObject("wscript.shell")
  4. oexcel.Visible = False
  5. oexcel.Workbooks.Open(ws.CurrentDirectory & "\a.xls")
  6. i = 1
  7. Do Until oexcel.Cells(i, 1).value = ""
  8.   For j = 1 To 2
  9.    vbstr = vbstr & oexcel.Cells(i, j).value & "#"
  10.   Next
  11.   vbstr = vbstr & vbCrLf
  12.   i = i + 1
  13. Loop
  14. oexcel.Workbooks.Close
  15. Set oexcel = Nothing
  16. Dim fso, filename, num, str
  17. Set fso = CreateObject("scripting.filesystemobject")
  18. For Each file In fso.GetFolder(ws.CurrentDirectory).Files
  19.   If LCase(fso.GetExtensionName(file)) = "as" Then
  20.     filename = Mid(file.Name, 7, Len(file.Name))
  21.     num = Left(file.Name, 6)
  22.     For Each str In Split(vbstr, vbCrLf)
  23.       If str <> "" Then If num = Split(str, "#")(0) Then fso.MoveFile file, file.ParentFolder & "\" & Split(str, "#")(1) & filename
  24.     Next
  25.   End if
  26. Next
  27. Set fso = Nothing
  28. Set ws = Nothing
  29. MsgBox "ok"
复制代码
1

评分人数

***共同提高***

TOP

7# batman

我按楼上的方法试了,执行完了显示OK,然后就没有反应了,文件名没有改过来

TOP

你一点都没改?起码你的后缀名是.scn,代码上是.as

还有i的初始值要设为2
***共同提高***

TOP

本帖最后由 huyoyoo 于 2011-6-3 19:23 编辑

感谢batman,问题解决了

另请问Excel表名对运行有影响吗?假如我的Excel中不止一个表,而是sheet1、sheet2、sheet3……

TOP

本帖最后由 batman 于 2011-6-3 20:01 编辑

10# huyoyoo
如果数据不在sheet1中就要定义活动页sheet,如数据在sheet2中:
oexcel.Workbooks.Open(ws.CurrentDirectory & "\a.xls")
oexcel.ActiveSheet(2).Activate
***共同提高***

TOP

返回列表