【问题标题】:VB Script to Rename Files?VB脚本重命名文件?
【发布时间】:2011-03-09 16:37:40
【问题描述】:

我编写了一个非常简单的批处理脚本,它将为我进行 XSLT 转换,将一堆 html 文件转换为 xml 文件:

FOR %%i IN (*.htm) DO java -jar saxon.jar -o:"..\Front_Matter\%%i.xml" "%%i" "C:\Documents and Settings\Robert\Desktop\xsl\htm2xml.xsl"

XSLT 工作正常,但只是创建的文件没有所需的文件名,例如,如果原始文件名是“Happy Christmas.htm”,我希望输出 xml 名为“Happy_Christmas.htm”。 xml”,所以只有两件事,一是去掉原始文件名的.htm部分,二是用下划线替换空格。

当前生成的文件名很难看,例如:“Happy Christmas.htm.xml”。

提前致谢!

【问题讨论】:

  • 顺便说一下,你的代码不是 VBScript,它是一个 Windows 批处理文件。
  • @Helen:对不起,我已经编辑过了。

标签: vbscript batch-file dos


【解决方案1】:
  1. 使用%%~ni 而不是%%i 来提取不带扩展名的基本文件名。

  2. 使用%var: =_% 语法将var 变量值中的空格替换为下划线。

所以,基本上,你需要这样的东西:

@echo off
setlocal enabledelayedexpansion

FOR %%i IN (*.htm) DO (
  SET basename=%%~ni
  SET basename=!basename: =_!
  java -jar saxon.jar -o:"..\Front_Matter\!basename!.xml" "%%i" "C:\Documents and Settings\Robert\Desktop\xsl\htm2xml.xsl"
)

【讨论】:

  • 进程好像进入了死循环,没有生成xml文件?
  • @Robert:我错过了htm2xml.xsl 之后的尾随引号。这可能是个问题吗?
  • 我确实把它放回了那里,但还是一样。让我再试一次。
  • 我又试了一次,还是没有反应。
  • @Robert:尝试删除@echo off 并检查输出(例如,java 命令行、文件名等)。批处理文件真的在循环吗?
【解决方案2】:
Set fso = CreateObject("Scripting.FileSystemObject")

set oFldr = fso.getfolder("N:\Groups\TestGroup\UPS\")

for each ofile in oFldr.Files
  if lcase(fso.GetExtensionName(ofile.Name)) = "txt" then
    fso.MoveFile ofile.Path, ofile.ParentFolder & "\HRSC100.txt"

    Exit for
  end if
Next
*if you want vbscirpt then above will work*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2014-07-17
    相关资源
    最近更新 更多