2013-01-09 57 views
20

我需要将一些xls文件转换为xlsx文件。我可以成功地将一个xls文件到XLSX运行以下命令进入命令提示符(窗口):批处理脚本 - 对目录中的每个文件运行命令

ssconvert inputFileName.xls outputFileName.xlsx 

(ssconvert是的Gnumeric的命令行实用程序,可在不同的电子表格文件格式之间进行转换)

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

举例来说,如果我有这样的文件集:

c:\directory\file1.xls 
c:\directory\file2.xls 
c:\directory\file3.xls 

输出应该是

c:\directory\file1.xlsx 
c:\directory\file2.xlsx 
c:\directory\file3.xlsx 

因此将该批次伪代码应该是这样的

directory = c:\directory\ 
for (fileName in directory) 
    ssconvert fileName.xls fileName.xlsx 

灿任何人都帮助我?

回答

25
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"

+0

我无法使它与/ r一起工作。删除了,并没有问题。 –

+0

@BradIrby我用它来运行jar-Konverter而不是ssconvert,它运行的很好,所以你可能在你的dos cmd.exe中有一些问题;-)。 – Sebastian

+0

FWIW/r表示“递归”(在这里似乎可以正常工作)(本例中的“%% vx”仅表示“使用%% v并在其后添加字母x”) – rogerdpack

9

你可以运行这样的事情(粘贴到蝙蝠的代码波纹管,或者如果你想让它interractively运行更换%%通过%

for %%i in (c:\directory\*.xls) do ssconvert %%i %%i.xlsx 

如果你可以运行PowerShell的将是:

Get-ChildItem -Path c:\directory -filter *.xls | foreach {ssconvert $($_.FullName) $($_.baseName).xlsx } 
19

事实上,从Windows Vista开始这很容易。微软添加了命令FORFILES

你的情况

forfiles /p c:\directory /m *.xls /c "cmd /c ssconvert @file @fname.xlsx" 

使用此命令的唯一奇怪的是,FORFILES自动添加周围@file和@fname双引号。但它应该无论如何工作

+0

请注意,引号可能与其他命令混乱,[但可以删除](https://stackoverflow.com/a/32491884/5475891) – phflack

0

我做类似的事情来编译目录中的所有c文件。
用于迭代不同目录中的文件请尝试此操作。

set codedirectory=C:\Users\code 
for /r %codedirectory% %%i in (*.c) do 
(some GCC commands) 
相关问题