我需要将一些xls文件转换为xlsx文件。我可以通过在cmd提示符(windows)中运行此命令将一个xls文件成功转换为xlsx:
ssconvert inputFileName.xls outputFileName.xlsx
(ssconvert是一个Gnumeric的命令行实用程序,可以在不同的电子表格文件格式之间进行转换)
我想编写一个批处理文件,指定目录中的FOR EACH文件运行我上面写的命令,使用当前文件名作为输入和输出文件名。
例如,如果我有这组文件:
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
任何人都可以帮助我吗?
答案 0 :(得分:42)
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"
答案 1 :(得分:22)
实际上,从Windows Vista开始,这很容易。 Microsoft添加了命令FORFILES
在你的情况下
forfiles /p c:\directory /m *.xls /c "cmd /c ssconvert @file @fname.xlsx"
这个命令唯一奇怪的是forfiles会自动在@file和@fname周围添加双引号。但无论如何它应该工作
答案 2 :(得分:9)
你可以运行这样的东西(将代码粘贴在.bat中,或者如果你希望它以%%
的形式交替运行%
:
for %%i in (c:\directory\*.xls) do ssconvert %%i %%i.xlsx
如果你可以运行powershell,它将是:
Get-ChildItem -Path c:\directory -filter *.xls | foreach {ssconvert $($_.FullName) $($_.baseName).xlsx }
答案 3 :(得分:0)
我正在做类似的事情来编译目录中的所有c文件。
迭代不同目录中的文件试试这个。
set codedirectory=C:\Users\code
for /r %codedirectory% %%i in (*.c) do
( some GCC commands )