пакетный скрипт - выполнить команду для каждого файла в каталоге

Мне нужно конвертировать некоторые файлы XLS в XLSX файлов. Я могу успешно конвертировать файл XLS в XLSX-файл, выполнив следующую команду в командную строку (в Windows):

ssconvert inputFileName.xls outputFileName.xlsx

(ssconvert является Gnumeric, в'командная строка с программой, которая может преобразовать между различными таблицами форматы файлов)

Я'd, как написать пакетный файл, который для каждого файла в указанной директории запускает команду я написал выше, используя текущие имя файла для ввода и для вывода имени файла.

Например, если у меня есть этот набор данных:

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: к /р %%в (*.формате xls) `

Эта часть возвращает массив файлов в текущем каталоге с расширением в с XLS. В %% может выглядеть немного любопытно. Это обычно символ специального % из командной строки, используемый в %путь% или %Temp%. Чтобы использовать его в пакетный файл, мы должны защитить его, как так: %%путь%% или %%темп%%. В этом случае мы просто выбираясь из временной переменной "в", который проведет наш массив имен файлов.

Мы используем переключатель /R, чтобы искать файлы рекурсивно, так что соответствующие файлы в папках ребенок также будет располагаться.

Часть 2: не ssconvert " ПО%%в" и " по%%ЧХ"`в

Это вторая часть того, что будет выполняться один раз в комбинационной именем, так что если следующие файлы присутствуют в текущей папке:

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"

Комментарии (6)

На самом деле это довольно легко, так как Windows Виста. Microsoft добавила команду FORFILES

в вашем случае

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

единственная странная вещь с этой команды заключается в том, что forfiles автоматически добавляет двойные кавычки файл @и @имени. но она должна работать в любом случае

Комментарии (1)

вы можете запустить что-то вроде этого (вставьте ниже код .летучая мышь, или если вы хотите запустить 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 }
Комментарии (1)

Я делаю подобную вещь, чтобы скомпилировать все файлы с в каталоге. <БР/> для перебора файлов в другой каталог это попробовать. <БР/>

set codedirectory=C:\Users\code
for /r  %codedirectory% %%i in (*.c) do 
( some GCC commands )
Комментарии (0)