2013-01-09 21 views
20

Potrzebuję przekonwertować niektóre pliki xls do plików xlsx. Mogę z powodzeniem przekształcić jeden plik xls do XLSX, uruchamiając polecenie do cmd prompt (Windows):skrypt wsadowy - uruchom polecenie dla każdego pliku w katalogu

ssconvert inputFileName.xls outputFileName.xlsx 

(ssconvert jest narzędziem wiersza polecenia danego GNUmeric że może konwersji pomiędzy różnymi formatami plików arkusza kalkulacyjnego)

I "chciałbym napisać plik wsadowy, który dla każdego pliku w określonym katalogu uruchamia polecenie, które napisałem powyżej, używając bieżącej nazwy pliku zarówno dla pliku wejściowego, jak i wyjściowego.

Na przykład, jeśli mam ten zestaw plików:

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

wyjście powinno być

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

więc partia pseudokod powinno być coś jak

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

Can ktoś mi pomoże?

Odpowiedz

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

Kilka osób pytało się mnie to wytłumaczyć, więc:

Część 1: for /r %%v in (*.xls)

Ta część zwraca tablicę plików w bieżącym katalogu, które mają rozszerzenie xls. Model %% może wyglądać nieco ciekawie. Zasadniczo jest to specjalny znak % z wiersza poleceń, użyty w% PATH% lub% TEMP%. Aby użyć go w pliku wsadowym, musimy wydostać się z niego w następujący sposób: %%PATH%% lub %%TEMP%%. W tym przypadku po prostu uciekamy z zmiennej tymczasowej v, która będzie przechowywać naszą tablicę nazw plików.

Używamy przełącznika /r, aby wyszukiwać pliki rekursywnie, więc zostaną znalezione wszystkie pasujące pliki w folderach podrzędnych.

Część 2: do ssconvert "%%v" "%%vx"

Ta druga część jest co dostanie wykonywany raz w pasującej nazwy pliku, więc jeśli następujące pliki były obecne w bieżącym folderze:

c:\temp\mySheet.xls, c:\temp\mySheet_yesterday.xls, c:\temp\mySheet_20160902.xls

następujące polecenia byłoby być wykonywane:

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

Nie mogłem go uruchomić z/r. Usunięto to i było w porządku. –

+0

@BradIrby Użyłem go do uruchomienia programu jar-Konverter zamiast ssconvert i działało dobrze, więc mogłeś mieć problemy z plikiem dos cmd.exe ;-). – Sebastian

+0

FWIW/r oznacza "rekursywny" (i wydawało się działać poprawnie tutaj) ("%% vx" w tym przypadku oznacza po prostu "użyj %% v i dodaj literę x po tym") – rogerdpack

9

można uruchomić coś takiego (wklej ryk kodu w .bat, lub jeśli chcesz go uruchomić interractively zastąpić %% przez %:

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

Jeśli można uruchomić PowerShell będzie:

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

W rzeczywistości jest to bardzo łatwe od czasów systemu Windows Vista.Microsoft dodał komendę FORFILES

w przypadku

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

jedyna dziwna rzecz z tego polecenia jest to, że forfiles automatycznie dodaje cudzysłowie @file i @fname. ale i tak powinno i tak działać

+0

Pamiętaj, że cytaty mogą nieść ze sobą inne polecenia, [ale można je usunąć] (https://stackoverflow.com/a/32491884/5475891) – phflack

0

Robię to samo, aby skompilować wszystkie pliki c w katalogu.
do iteracji plików w innym katalogu Spróbuj tego.

set codedirectory=C:\Users\code 
for /r %codedirectory% %%i in (*.c) do 
(some GCC commands) 
Powiązane problemy