标题: [文本处理] [已解决]对应Excel字符串批量修改文件名 [打印本页]
作者: huyoyoo 时间: 2011-5-31 19:47 标题: [已解决]对应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…
请各位大虾指教
作者: batman 时间: 2011-6-1 16:19
楼主是不是所有的定单名字都是固定的前四位是数字呢?
如果不是还请楼主描述清楚划分规则,如出现11111a.as这样的情况是武汉的第111张定单还是别的城市的第11张定单?
作者: huyoyoo 时间: 2011-6-1 17:10
本帖最后由 huyoyoo 于 2011-6-1 17:15 编辑
楼主是不是所有的定单名字都是固定的前四位是数字呢?
如果不是还请楼主描述清楚划分规则,如出现11111a.as这样的情况是武汉的第111张定单还是别的城市的第11张定单?
batman 发表于 2011-6-1 16:19
是的,位数是固定,我实际订单是12位的,前六位是代表城市编码,后六位是流水号,上述例子中前2位是城市编码,后三位是流水号。
作者: tmplinshi 时间: 2011-6-1 17:11
本帖最后由 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)- @echo off
- SetLocal EnableDelayedExpansion
- cd /d "%~dp0"
-
- rem 设置路径
- set xls="d:\a.xls"
- set "folder=d:\含 as 文件的文件夹路径"
-
- rem 也可以直接把“含 as 文件的文件夹”拖到批处理图标上
- if "%~1" neq "" set "folder=%~1"
-
- for /f "tokens=1,2" %%a in ('"doctotext %xls% 2>nul | iconv -f utf-8"') do (
- for %%i in ("%folder%\%%a*.as") do (
- set str=%%i
- ren "%%i" "%%b!str:*%%a=!"
- )
- )
- pause
复制代码
作者: huyoyoo 时间: 2011-6-1 19:15
楼上的用不了啊
作者: tmplinshi 时间: 2011-6-1 19:20
本帖最后由 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 楼的代码修改了一个小地方,你再试试。
作者: batman 时间: 2011-6-1 19:40
本帖最后由 batman 于 2011-6-1 21:50 编辑
vbs版(对应的是12位编码)- Dim oexcel, vbstr
- Set oexcel = CreateObject("excel.application")
- Set ws = CreateObject("wscript.shell")
- oexcel.Visible = False
- oexcel.Workbooks.Open(ws.CurrentDirectory & "\a.xls")
- i = 1
- Do Until oexcel.Cells(i, 1).value = ""
- For j = 1 To 2
- vbstr = vbstr & oexcel.Cells(i, j).value & "#"
- Next
- vbstr = vbstr & vbCrLf
- i = i + 1
- Loop
- oexcel.Workbooks.Close
- Set oexcel = Nothing
- Dim fso, filename, num, str
- Set fso = CreateObject("scripting.filesystemobject")
- For Each file In fso.GetFolder(ws.CurrentDirectory).Files
- If LCase(fso.GetExtensionName(file)) = "as" Then
- filename = Mid(file.Name, 7, Len(file.Name))
- num = Left(file.Name, 6)
- For Each str In Split(vbstr, vbCrLf)
- If str <> "" Then If num = Split(str, "#")(0) Then fso.MoveFile file, file.ParentFolder & "\" & Split(str, "#")(1) & filename
- Next
- End if
- Next
- Set fso = Nothing
- Set ws = Nothing
- MsgBox "ok"
复制代码
作者: huyoyoo 时间: 2011-6-2 18:55
7# batman
我按楼上的方法试了,执行完了显示OK,然后就没有反应了,文件名没有改过来
作者: batman 时间: 2011-6-2 22:39
你一点都没改?起码你的后缀名是.scn,代码上是.as
还有i的初始值要设为2
作者: huyoyoo 时间: 2011-6-3 19:20
本帖最后由 huyoyoo 于 2011-6-3 19:23 编辑
感谢batman,问题解决了
另请问Excel表名对运行有影响吗?假如我的Excel中不止一个表,而是sheet1、sheet2、sheet3……
作者: batman 时间: 2011-6-3 19:58
本帖最后由 batman 于 2011-6-3 20:01 编辑
10# huyoyoo
如果数据不在sheet1中就要定义活动页sheet,如数据在sheet2中:
oexcel.Workbooks.Open(ws.CurrentDirectory & "\a.xls")
oexcel.ActiveSheet(2).Activate
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |