質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Q&A

解決済

1回答

3436閲覧

バッチコマンドでforilesの中でfor文って使います?

hyksm

総合スコア174

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

0グッド

0クリップ

投稿2016/12/12 07:03

バッチファイルを使って古いPDFファイルを圧縮しようと思ってます
先日、こちらで圧縮方法は教えていただいて(ghostscript)うまくいったのですが

しかしなぜだかフォルダ内のファイルをまとめて圧縮しようとするとうまくいかず困っています

forfilesの中にfor文をかいているからでしょうか?

以下の様に別名で保存すれば問題はないのですが、同じ名前だとファイルが3kとかになりpdfが開けなくなります。。。

forfiles /P C:\pdf /S /M *.pdf /C "cmd /c if @isdir==FALSE for /r %%A in (*.pdf) do gswin64c -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=%%A %%A" /D -90

上記の様に90日以前のpdfは圧縮としたいのですが
結果はPDFが壊れる?のか中身が真っ白なPDFになります。

forfiles /P C:\pdf /S /M *.pdf /C "cmd /c if @isdir==FALSE for /r %%A in (*.pdf) do gswin64c -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=%%A_2.pdf %%A" /D -90

などoutputのファイル名を%%A_2.pdfのように変更すれば問題ないのですが
同じ名前にしたいのです。

ググっても
forfilesの中にforをかいている例がなかったので、描き方が悪いのかなあと。。。

ご教示願います!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2016/12/12 13:16

forfilesやforをせず、gswin64cコマンドを単独で使うと、出力先を同じファイル名に出来るのですか?
hyksm

2016/12/13 00:20

駄目でした。問題はgswin64cにありました。
guest

回答1

0

ベストアンサー

同じファイル名を使えるかどうかは、forfilesやforの問題では無く、gswin64cの機能の問題です。
forfilesやforをせず、gswin64cコマンドを単独で使うと、出力先を同じファイル名に出来るのですか?

forfilesとfor /rの機能がかぶっているというか、全体として意味不明になっています。
正しくは、こうです。

dos

1forfiles /P C:\pdf /S /M *.pdf /D -90 /C "cmd /c gswin64c -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=@path_2.pdf @path"

投稿2016/12/12 13:39

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hyksm

2016/12/12 18:31

確かにそうですね。バッチコマンドに詳しくないので見よう見まねでやってましたが、この書き方なら理にかなってますね。試して見ます。ありがとうございました。 ファイル名の件もそう言う事ですね! ハマった時ほど気付けないものですね。。。お恥ずかしい
hyksm

2016/12/13 00:49

forfiles /PC:\pdf /S /M *.pdf /D -90 /C "cmd /c gswin64c -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=@path.pdf @path" forfiles /P C:\pdf /S /M *.pdf /D -90 /C "cmd /c if @isdir==FALSE del /s @path" pushd C:\pdf for /r %%A in (*.pdf.pdf) do ren %%A %%~nA popd まず90日以前の.pdfファイルを検索しgswin64cで圧縮(圧縮されたものは日付が当日になる) それから90日以前の.pdfを削除し 最後に*.pdf.pdfというファイルをファイル名(ここでは*.pdfになる)だけにする 結果*.pdfファイルが圧縮された形で更新される という力技で対応しました もっと良い描き方があればご指摘下さい!ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問