50

いくつかのxlsファイルをxlsxファイルに変換する必要があります。このコマンドをcmdプロンプト(Windows)で実行することにより、1つのxlsファイルをxlsxに正常に変換できます。

ssconvert inputFileName.xls outputFileName.xlsx

(ssconvertは、異なるスプレッドシートファイル形式間で変換できるGnumericのコマンドラインユーティリティです)

指定されたディレクトリのFOREACHファイルが、入力ファイル名と出力ファイル名の両方に現在のファイル名を使用して、上記で記述したコマンドを実行するバッチファイルを作成したいと思います。

たとえば、このファイルのセットがある場合:

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

誰か助けてもらえますか?

4

4 に答える 4

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

この 2 番目の部分は、一致するファイル名ごとに 1 回実行されるため、現在のフォルダーに次のファイルが存在する場合:

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"

于 2013-01-09T14:43:29.840 に答える
33

実際、これは Windows Vista 以降ではかなり簡単です。Microsoft はコマンドFORFILESを追加しました

あなたの場合

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

このコマンドの唯一の奇妙な点は、forfiles が @file と @fname の周りに二重引用符を自動的に追加することです。しかし、とにかく動作するはずです

于 2013-01-09T15:04:24.257 に答える
15

このようなものを実行できます(次のコードを .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 }
于 2013-01-09T14:42:40.773 に答える