сценарий пакетной обработки - команда выполнения на каждом файле в справочнике

Я должен преобразовать некоторые xls файлы в xlsx файлы. Я могу успешно преобразовать один xls файл в xlsx, управляя этой командой в cmd, быстрый (окна):

ssconvert inputFileName.xls outputFileName.xlsx

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

Я хотел бы написать пакетный файл, который ДЛЯ КАЖДОГО файла в указанном справочнике управляет командой, которую я написал выше, используя текущее имя файла и для входа и для имени файла продукции.

Например, если у меня есть этот набор файлов:

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

Кто-либо может помочь мне?

24
nl ja de

4 ответы

for /r %%v in (*.xls) do ssconvert "%%v" "%%vx"

пара сделала, чтобы люди попросили, чтобы я объяснил это, таким образом:

Part 1: for /r %%v in (*.xls)

Эта часть возвращает множество файлов в текущем каталоге, которые имеют xls расширение. %% может выглядеть немного любопытным. Это - в основном специальное предложение % характер из командной строки, как используется в %PATH % или %TEMP %. Чтобы использовать его в пакетном файле, мы должны избежать его как так: %% ПУТЬ %% или %% РАБОТАЕТ ВРЕМЕННО %% . В этом случае мы просто избегаем временной переменной v , который будет держать наше множество имен файлов.

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

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

32
добавлено
Почему didn' t вы объясняете команду так, чтобы другие как я могли лучше использовать ее...?
добавлено автор Tomáš Zato, источник
Я не мог заставить его работать с/r. Удаленный это и это были прекрасны.
добавлено автор Brad Irby, источник
FWIW/r означает "рекурсивный" (и, казалось, работал хорошо здесь) ("%% vx" в этом случае, просто означает "использование %% v, и добавьте букву X после этого"),
добавлено автор rogerdpack, источник
@BradIrby I' ve использовал его, чтобы управлять банкой-Konverter вместо ssconvert, и это работало хорошо, таким образом, вы могли бы, имел некоторые проблемы с вашей DOS cmd.exe;-).
добавлено автор Sebastian, источник
помните, что, если вы пробуете от командной строки, она работает с единственным знаком процента, в то время как в партии (cmd) файл ей нужен двойной знак процента!
добавлено автор Costin Gușă, источник
необходимо добавить некоторое объяснение к тому, что вы на самом деле сделали. Люди viit stackoverflow, чтобы учиться, не скопировать - по крайней мере, они должны
добавлено автор Julian, источник

Actually this is pretty easy since Windows Vista. Microsoft added the command FORFILES

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

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

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

19
добавлено
Обратите внимание, что кавычки могут связываться с другими командами, но может быть удален
добавлено автор phflack, источник

можно бежать, что-то вроде этого (приклейте кодовый рев в .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 }
9
добавлено

I am doing similar thing to compile all the c files in a directory.
for iterating files in different directory try this.

set codedirectory=C:\Users\code
for /r  %codedirectory% %%i in (*.c) do 
( some GCC commands )
0
добавлено