首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理脚本-对目录中的每个文件运行命令

批处理脚本-对目录中的每个文件运行命令
EN

Stack Overflow用户
提问于 2013-01-09 22:34:12
回答 4查看 109.5K关注 0票数 46

我需要将一些xls文件转换成xlsx文件。我可以成功地将一个xls文件转换为xlsx,方法是在命令提示符(Windows)中运行以下命令:

代码语言:javascript
复制
ssconvert inputFileName.xls outputFileName.xlsx

(ssconvert是一个Gnumeric的命令行工具,可以在不同的电子表格文件格式之间进行转换)

我想写一个批处理文件,为指定目录中的每个文件运行我上面写的命令,使用输入和输出文件名的当前文件名。

例如,如果我有这样一组文件:

代码语言:javascript
复制
c:\directory\file1.xls
c:\directory\file2.xls
c:\directory\file3.xls

输出应为

代码语言:javascript
复制
c:\directory\file1.xlsx
c:\directory\file2.xlsx
c:\directory\file3.xlsx

因此,批处理伪代码应该类似于

代码语言:javascript
复制
directory = c:\directory\
for (fileName in directory)
    ssconvert fileName.xls fileName.xlsx

有谁可以帮我?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-09 22:43:30

代码语言:javascript
复制
for /r %%v in (*.xls) do ssconvert "%%v" "%%vx"

有几个人要求我解释这个问题,所以:

第1部分:for /r %%v in (*.xls)

此部分返回当前目录中扩展名为xls的文件的数组。%%看起来可能有点奇怪。这基本上是在%PATH%或%TEMP%中使用的命令行中的特殊%字符。要在批处理文件中使用它,我们需要像这样转义它:%%PATH%%%%TEMP%%。在本例中,我们只是简单地转义临时变量v,它将保存我们的文件名数组。

我们使用/r开关递归地搜索文件,因此也将定位到子文件夹中的任何匹配文件。

第2部分:do ssconvert "%%v" "%%vx"

第二部分是每个匹配的文件名将执行一次的内容,因此,如果当前文件夹中存在以下文件:

c:\temp\mySheet.xls, c:\temp\mySheet_yesterday.xls, c:\temp\mySheet_20160902.xls

将执行以下命令:

ssconvert "c:\temp\mySheet.xls" "c:\temp\mySheet.xlsx" ssconvert "c:\temp\mySheet_yesterday.xls" "c:\temp\mySheet_yesterday.xlsx" ssconvert "c:\temp\mySheet_20160902.xls" "c:\temp\mySheet_20160902.xlsx"

票数 61
EN

Stack Overflow用户

发布于 2013-01-09 23:04:24

实际上,这很容易,因为Windows Vista。微软增加了FORFILES命令

在你的情况下

代码语言:javascript
复制
forfiles /p c:\directory /m *.xls /c "cmd /c ssconvert @file @fname.xlsx"

这个命令唯一奇怪的地方是forfiles会自动在@file和@fname两边添加双引号。但不管怎样,它应该是可行的

票数 31
EN

Stack Overflow用户

发布于 2013-01-09 22:42:41

您可以运行如下代码(将下面的代码粘贴到.bat中,或者如果您希望它以交互方式运行,请将%%替换为%

代码语言:javascript
复制
for %%i in (c:\directory\*.xls) do ssconvert %%i %%i.xlsx

如果您可以运行powershell,它将是:

代码语言:javascript
复制
Get-ChildItem -Path c:\directory -filter *.xls | foreach {ssconvert $($_.FullName) $($_.baseName).xlsx }
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14237548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档