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

标签 batch-file cmd foreach ssconvert

我需要将一些 xls 文件转换为 xlsx 文件。我可以通过在 cmd 提示符(Windows)中运行此命令成功地将一个 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

有人可以帮助我吗?

最佳答案

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"

关于batch-file - 批处理脚本 - 对目录中的每个文件运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14237548/

相关文章:

java - 如何在 Windows 中的 Cygwin shell 中执行批处理文件

batch-file - qBittorrent、FileBot、mkvmerge - 将所有视频文件重新混合到 *.mkv 并删除进程中的字幕

scala - 为什么在这种情况下需要过滤器实现?

r - foreach%dopar%-是否保证结果顺序?

java - 如何使用 for 遍历 Java 中的流?

windows - 以管理员身份执行时如何在批处理文件中捕获 powershell 脚本的错误级别

windows - 在批处理脚本中将最近修改的文件从源复制到目标

file - 将文件夹中的每个文件移动到以该文件命名的自己的文件夹中的批处理脚本?

postgresql - pgAdmin III 大师提示 - 服务器未监听

python - uszipcode Windows 命令提示符 : ImportError: DLL load failed: The specified module could not be found