マルシェル新規登録で5000円分当たる

Windows版のgzipについて

os:win xp-pro

gzip「http://www.gzip.org/」 windows版で
標準入力からの情報を圧縮しようとするとおかしくなります。

以前にpostgresからのダンプ圧縮としてマニュアルに載っているコマンド(linux用)をWindowsでも出来ないかと質問させて頂いたところ、
gzipのWindows版を紹介して頂きました。


<ダンプ圧縮コマンド>
pg_dump dbname | gzip > filename.gz


<試行1>
Windows版のgzipをインストール後、試してみました。
pg_dump.exe --host=localhost --username=postgres template1 | gzip.exe > C:?Temp?test_dump.gz
しかし、C:?Temp?test_dump.gzを解凍できません。
一旦、テキストで出した後、改めて圧縮すると解凍できます。
pg_dump.exe --host=localhost --username=postgres template1 > C:?Temp?test_dump
gzip.exe C:?Temp?test_dump


<試行2>
一旦、postgresの事は忘れて、適当なテキストファイルを用意し、標準入力から圧縮しました。

type c:?temp?test.txt | gzip.exe > c:?temp?test.txt.gz

結果は、やはり解凍できません。

シンプルに圧縮してみました。
gzip.exe c:?temp?test.txt

c:?temp?test.txt.gzを解凍する事ができました。



どうしたものでしょうか?
何かやり方が悪いのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

こちらでは、まったく再現しません。

正常に動作しています。

正直、どうなってるかわかりません。
・type c:\temp\test.txt | gzip.exe > c:\temp\test.txt.gz
としたときの test.txt.gzをバイナリエディタで開いてみたり、 linuxにバイナリ転送→fileコマンドで識別してみたりして、どんな出力になっているかを確認する。
・CygwinやMinGWを使ってみる

位しか思いつきません。

・実験環境
XP SP3 32bit
PATH=C:\WINDOWS;C:\WINDOWS\SYSTEM32
として、なるべく他の影響を遮断

・実験内容
gzip -v9 ファイル (ファイルを置き換える)
gzip -v9c ファイル > ファイル.gz (入力指定、標準出力へ)
gzip -v9c < ファイル > ファイル.gz (標準入力から、標準出力へ)
type ファイル | gzip -v9c > ファイル.gz (パイプから入力)
の4つを実行。gzipはフルパスで指定。
ファイルにはgzip for Windwos 1.3.12のChangelog(テキスト)とgzip.exe(バイナリ)をリネームして使用
-l,-tオプションでの確認と、Cygwinのgzipを使用しての伸長後との比較
→すべての条件で-l,-t問題なし。伸長後も圧縮前と一致。

念の為、1.2.4, 1.3.12両方でやってみましたが、同じ結果でした。
    • good
    • 0
この回答へのお礼

「こちらでは、まったく再現しません。正常に動作しています。」という回答に、もしやと思い、cmd.exeを起動し、そこから実行しました。
すると、うまくいきました。

書き忘れていましたが、Windows PowerShellから実行していました。

Windows PowerShellから・・・NG
コマンドプロンプトから・・・OK

という結果です。

type c:\temp\test.txt | gzip.exe > c:\temp\test.txt.gz
をtest.batに保存し、
PowerShellからtest.batを実行すると正しく動作しました。

gzipというよりPowerShellの問題のようです。

わざわざ検証していただき、本当にありがとうございます。

お礼日時:2010/06/10 11:01

Unix 環境の cat 相当の処理をしたいのだと思いますが、


type は cat ではないのでバイナリファイルをうまく扱えず、
結果としてパイプを通して gzip に渡せていないように思います。

対策としては cat を使えるように cygwin や msys 環境を作るか、
単独で cat 相当のコマンドを導入することになります。

パイプに拘るのであれば、cygwin か msys を導入するのを提案します。
    • good
    • 0
この回答へのお礼

ありがとうございます。
PowerShellから起動したのが悪かったようです。

お礼日時:2010/06/10 11:05

標準出力へ出力する -c オプションと、標準入力から入力を表わす - を付けたらどうなりますか?


type c:\temp\test.txt | gzip.exe -c - > c:\temp\test.txt.gz

この回答への補足

だめです。
同じ事になります。

gzip test.txt というシンプルな使いかた以外では全く成功しません。

ちなみに成功した場合は正しく解凍できますが、圧縮に失敗した場合、
test.txt.gz: not in gzip format
となります。

左から入れられないなら、windowsにわざわざgzipを入れる意味が無いですし、どうしたものかという感じです。

補足日時:2010/06/08 09:46
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWindowsでgzをコマンドラインにより解凍するには

WindowsXP Proを使っています。
gzで圧縮されたファイルを定期的にコマンドラインにより解凍したいと思っています。調べてみると+Lhacaデラックス版が対応しているということ・コマンドラインから読み出せるということで使ってみましたが
「問題が発生したため、Lhaca.exeを終了します。ご不便をおかけしまして申し訳ありません。」のポップアップウィンドウが表示され終了してしまいます。3台違うPCでやりましたが、2台は同じ状況で、1台はVidual Studioデバッガが立ち上がりエラーが発生している様子です。
行いたい事はコマンドラインからgzを解凍したいだけなので、必ずしもLhacaを使う必要はありません。
・コマンドラインからgzを解凍できるソフトはないか?
・対応しているはずのLhacaがなぜエラーが出るのか?対処方法は?
いずれかご存知の方、ご教授ください。

Aベストアンサー

素直にGzipのWin版を使うとか。

参考URL:http://gnuwin32.sourceforge.net/packages/gzip.htm

QUNIXで圧縮したgzipをWINDOWSで解凍する方法

-
UNIXで圧縮したgzip形式のファイルを、WINDOWS上で解凍して
使いたいのですが、解凍方法、若しくは、解凍ツールをご存知の方が
いらっしゃいましたら、是非教えてください。

特に、gzip形式にこだわっている訳ではないので、UNIXで圧縮したファイルを
WINDOWS上で解凍する方法でも構いません。

実際に使用するファイルは、ORACLEのインポートデータです。
どうぞ、どんなアドバイスでも結構です、宜しくお願いいたします。
-

Aベストアンサー

gzipなら、WindowsのWinZIPで解凍できます。
(現に仕事で使ってますし。)

ただし、1つだけ質問ですが、そのファイルの中にWindowsで使用できない
文字をファイル名として使用したものはないですよね?
UNIXでファイル名として使用できる文字とWindowsで使用できる文字には
若干の違いがありますので....
(ありがちなのが、ハイフン"-"を使ったファイル名)

QWindows7 zip圧縮・解凍のコマンド

同様の質問があったらすみません。

OS Windos7 では、標準でzipファイルの圧縮・解凍ができるようですが、
この操作をcmd.exeを使って行いたいと考えています。

質問(1)
そのようなコマンドはありますか?

質問(2)
コマンドがあれば、教えてください。
または、参照できるホームページ等教えていただけませんか?

よろしくお願いいたします。

Aベストアンサー

> コマンドがあれば、教えてください。

Win7はzipfldr.dllで処理しています。
RouteTheCall パラメータはfilename.zipのサブフォルダに
filenameフォルダを作成して解凍ファイルを格納します。
filenameにはzipファイル名を指定してください。

rundll32.exe zipfldr.dll,RouteTheCall filename.zip

Qバッチでテキストファイルから任意の行のみ取得したい

batファイルを作成していて、
txtから特定の行のみをとりだし、変数に入れたいです。
どうもよくわからないので質問したいと思います。
まず以下の様なテキストファイルがあります。
-------------------
111
222
333
-------------------
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。

行いたい動作は、
-----------------------------------------
1.テキストファイルの1行目を変数Textに入れる(set Text=111)
2.変数Textを使用し色々処理をする
3.テキストファイルの2行目を変数Textに入れる(set Text=222)
4.変数Textを使用し色々処理をする
-----------------------------------------
コレを繰り返します。
2と4は同じ動作ですので、行数のカウンタを設定しループさせる予定です。
n行目を全て取り出す方法がわかれば行けると思うのですが、
どうも見つかりません。ご存知の方がいればお教え願いたいと思います。

batファイルを作成していて、
txtから特定の行のみをとりだし、変数に入れたいです。
どうもよくわからないので質問したいと思います。
まず以下の様なテキストファイルがあります。
-------------------
111
222
333
-------------------
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。

行いたい動作は、
-----------------------------------------
1.テキストファイルの1行目を変数Textに入れる(set Text=111)
2.変数Textを使用し色々処理をする
3.テキストファイルの2行目を変数T...続きを読む

Aベストアンサー

No3ですが、たぶん提示したスクリプトを見ると、ある事に気がつくはず?

findstr /n /r "." a.txt | findstr /r "^3:"

で3行目を表示してくれます。え!? それだけ。そうなんです

ただ、あと、先頭の”3:” をどうやって切り離すか? と言う問題にぶつかる。さらにファイルに先頭に”3:”があった場合、どうするのか? さらに、findstr の正規表現の動作が??? 表示すれるのはいいが、変数にどうやってセットするのか?

となる。結局 for 文を使いまわす事になります。

まあ、適当に改変して、上記の問題を解決してください。

Qコマンドプロンプトを使ってipアドレスからコンピュータ名を知る方法

ipアドレスは分かっていますがコンピュータ名が分かりません。リモート接続ソフトなどは使えないので、それでコンピュータ名を調べることはできません。
コマンドプロンプトを使ってipアドレスからコンピュータ名を知る方法を教えてください!

Aベストアンサー

なんか回答がバラバラなので整理しましょう。
調査している自分自身が使用している端末は、Windows XPのPCであると仮定します。
また、調べるのは基本的に外部から名前解決可能な名前(No.2さんの言う"2"に相当する名前)とします。

パターン1:
対象のIPアドレスがWindows端末機で、自分が使用している端末と同じネットワークに属しているか同一のWINSサーバを参照しているとき……No.4さんの答えで検索できます。

nbtstat -A <IP Address>

パターン2:
ネットワーク管理者がDNSをきちんと管理しており、対象IPについても管理者の管理下にある場合……以下2つのいずれかの方法で検索できます。

  nslookup <IP address>

または

  nslookup -q=ptr <reverse ip>.in-addr.arpa.
  ex) 192.168.12.1 のIPを調べたい場合、以下のように入力する
  nslookup -q=ptr 1.12.168.192.in-addr.arpa.

  (DNSサーバで逆引きが設定されていないと、正しく検索できない場合があります)

パターン3:
上記以外の場合

外部から名前解決できないので、調べようがありません。または、調べてもそれが正しいホスト名である保証がありません。
そのIPの端末自体に設定されているホスト名を直接調べるしかありませんが、それには実際にそのIPの端末を操作して調べるしかありません。
つまり、No.2さんの回答となるのですが、
IPを使用しているのがWindows PCやUnixサーバなどである保証はないので、確認するコマンドはその端末の種類(OS)によって異なります。

なお、tracert (traceroute)を使用する、という回答がありますが、これはパターン1またはパターン2のいずれかまたは両方を満たしていないと表示されませんので、厳密には正しい答えとはいえません。
(たいていの場合、"tracert <IP address>" や "ping <IP address>"で用が足りてしまうことも多いので、必ずしも間違いではないのですが)

なんか回答がバラバラなので整理しましょう。
調査している自分自身が使用している端末は、Windows XPのPCであると仮定します。
また、調べるのは基本的に外部から名前解決可能な名前(No.2さんの言う"2"に相当する名前)とします。

パターン1:
対象のIPアドレスがWindows端末機で、自分が使用している端末と同じネットワークに属しているか同一のWINSサーバを参照しているとき……No.4さんの答えで検索できます。

nbtstat -A <IP Address>

パターン2:
ネットワーク管理者がDNSをきちんと管理して...続きを読む

QData Pump で大量データインポートの際のUNDO表領域、TEMP表領域不足エラー解消法のついて

いつも多くの方々にお世話になっております。
どうしても解決できなかったので、質問を書き込ませていただきました。

大量データのテーブルをDataPump の Impdp でインポートしようとした際に、
UNDO表領域やTEMP表領域不足によりインポートが中断されてしまうので、
その解消法を探しています。

単純にTEMP表領域やUNDO表領域のサイズを大きくすれば解決できるのですが、
ディスクの容量に限りがあり、TEMP表領域やUNDO表領域のサイズを700MBのまま、
大量データをImpdp でインポートできるようにしたいのですが、そうするとうまくいきません。

以前からあったImport の場合でしたら、「COMMIT=Y」としていすれば、
大量データであっても、TEMP表領域やUNDO表領域のサイズを700MBのまま、インポートできました。

しかし、Impdp には「COMMIT=Y」がサポートされなくなったとOTNのドキュメントにも書かれていました。

従来のImport を使えばインポートできるのですが、非常に時間を要するため、
TEMP表領域やUNDO表領域のサイズを気にせずとも
Data Pump のImpdp を用いてインポートできる方法を
ご存知の方がいらっしゃいましたら、ご教授願えませんでしょうか?

いつも多くの方々にお世話になっております。
どうしても解決できなかったので、質問を書き込ませていただきました。

大量データのテーブルをDataPump の Impdp でインポートしようとした際に、
UNDO表領域やTEMP表領域不足によりインポートが中断されてしまうので、
その解消法を探しています。

単純にTEMP表領域やUNDO表領域のサイズを大きくすれば解決できるのですが、
ディスクの容量に限りがあり、TEMP表領域やUNDO表領域のサイズを700MBのまま、
大量データをImpdp でインポートできるようにした...続きを読む

Aベストアンサー

テーブル単位でインポートなどでも駄目なのでしょうか?
UNDOや一時領域をなるべく生成しない方法を考えましょう。
#この事象はサポートセンター行きだと思います。

QFOR文内でサブルーチンをCALLした際の、ERRORLEVELの取得

ファイルをコピーしてからFOR文により6回処理を繰り返すような
バッチファイルを作成しようと思っています。
そのFOR文内でコールしたサブルーチンのERRORLEVELがうまく取得できません。ファイルコピーをしなければ値が取得できるのですが。。。
何が 原因なのか皆目見当つかずで行き詰ってしまいました。
どなたか 教えてください。 宜しく御願いします。

@echo off
copy test.txt test.txt.bak

for /L %%A in (0,1,5) do (
call :test
echo 戻り値:%ERRORLEVEL%
)
:test
exit /b 99

Aベストアンサー

環境変数は、一行ごとに解釈されるようです。
%ERRORLEVEL%も同様です。
for ( ... )は、一文とみなされ、for文内でERROELEVELが変わっていても、
echo文の%ERRORLEVEL%は、for文実行前の値となってしまいます。
実際には、ERRORLEVELはセットされており、
if errorlevel では、ちゃんと機能します。

実行中に変更される環境変数を使用するためには、
遅延環境変数という機能があります。

cmd /v:onとしてコマンドプロンプトを起動後、
変数を、!ERROELEVEL! と指定することで、実行中に変更された環境変数を使用することができます。

以上

Qバッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には1行の文字列があります。
このファイルをバッチで読み取り、変数に設定したいです。

例:
test.txt
abcacbacbacbacbacbacbacbacb

test,bat
set DATA=[test.txtを読み込んだ値]

よろしくお願い致します。

Aベストアンサー

これですね。

参考URL:http://www.upken.jp/kb/dqvgHNRUxwFDkmtoqEwfXHUjDrevNv.html

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

QSQLで特定の項目の重複のみを排除した全項目を取得する方法

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として


項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 B    え    イ    江

上のようなデータを取得したいのです。
この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。
また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。

どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のよ...続きを読む

Aベストアンサー

比較可能で一意性のある値をもてる項目6をテーブルに追加して、

select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6;

――ってやるのが、一番手っ取り早いと思います。
他のところに影響がでないのであればですが。
oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。


人気Q&Aランキング