CMD

ファイルの読み書き

CMD

久しぶりのバッチスクリプトネタ。 for /fでファイルを読むと、空行の無視その他いろいろ問題があるので、どんなテキストファイルでも読む方法。 @echo off setlocal enabledelayedexpansion set INFILE=XXXXXXXX set OUTFILE=YYYYYYYY for /f %%A in ('find…

PATHを1行ずつ表示する

CMD

環境変数PATHの内容を1項目1行で表示する。 その際に、C:\Program Filesで始まる物は表示しない。 単に改行するだけなら、文字列置換で簡単。改行に置換する際には、遅延環境変数にする事が必要。 C:\Program Filesの除外は、findstr /vで出来れば良いが、置…

コマンドプロンプトの微妙な仕様

CMD

コマンドプロンプトで、aaa\..\foo.txtと入力すると、カレントディレクトリにaaaというディレクトリがあれば、その親のfoo.txtなので結局カレントディレクトリのfoo.txtが拡張子に関連付いたプログラムが起動してファイルを開くのは当然だ。 しかし、aaaが存…

CD コマンドの機能拡張 第三版

CMD

「CD コマンドの機能拡張 第二版」以来、16年ぶりの大幅修正。機能は変えていないが、リファクタリングで機能追加がシンプルになった。 cdd.batという名前で作って、doskey cd=cdd $*でaliasを定義して使う。 機能は、 移動はすべて pushd で行う。 cd のみ…

コマンドプロンプト画面の文字色を固定に

CMD

コマンドプロンプトの色は、背景を黒、文字を白にしているのだが、プログラムによっては他の色の文字が表示される。 白以外の文字を黒背景に出すと非常に読みにくいので、白固定にした。 まず、レジストリ。 Windows Registry Editor Version 5.00 [HKEY_CUR…

いまさら知ったfor変数

CMD

for %%A in (A B C D E) do call :sub goto :EOF :sub for %%B in (1 2 3 4 5) do echo %%A-%%B レキシカルには :sub は、for %%A のループの外だが、%%A が参照できる! 今まで、引数で渡してました。なんてことだ。 しかし、goto すると %%B だけでなく %%…

forfilesコマンドのバグ?

ちょっと信じがたいけど、少なくともWindows7では、forfilesコマンドにバグがある。テストしてないのか? /c で指定した外部コマンドの第一引数が落ちるようだ。cmd /c を書けば問題なし。 D:\foo>forfiles /c "gecho 1 2 3 @file" 2 3 bar 2 3 baz D:\foo>f…

call無しの他バッチスクリプト呼び出し

CMD

バッチスクリプトから他のバッチスクリプトを呼び出すときに、callで呼び出さないと戻ってこない物だと思っていた。 <<foo.bat>> bar.bat echo foo ・・・・・実行されない <<bar.bat>> echo bar しかし、forだと実行される。 <<foo.bat>> for %%A in (a b c) do bar.bat&echo foo ・・</foo.bat></bar.bat></foo.bat>…

サーバー移行

http://otnx.jp のサイトを、共用レンタルサーバーから、VPSに移行した。 本日、DNS の登録変更。 ようやくというか、移行しようと思ってから、2年半放っておいたのか。。。。。あとまだメーリングリストの移行がある。

for /f の eol= オプション

CMD

今まで、for /f コマンドの eol= オプションについては無視してきた。これは、読み込んだ行の行頭の文字によって読み飛ばす機能だが、デフォルトの文字が「;」(セミコロン)である。なので、昔作ったhead.batやtail.batでは、空行だけでなく行頭がセミコロ…

find.exe のバグ?制限値?

CMD

find では長い行を扱えないようだ。 C:\>ruby -e "5.times{puts '@'*4094}" | find "@" | ruby -nle "puts $_.size" 4094 4094 4094 4094 4094 C:\>ruby -e "5.times{puts '@'*4095}" | find "@" | ruby -nle "puts $_.size" 20474 C:\> 改行を含んで4096ま…

Windows Vista/7 で増えたコマンド

CMD

/? の冒頭部分だけ載せる。 まず、CMDのビルトインコマンドで増えた物は、help の出力を比較して外部コマンドを除いてみると、1つだけ。 MKLINK シンボリック リンクを作成します。 MKLINK [[/D] | [/H] | [/J]] リンク ターゲット /D ディレクトリのシンボ…

ATコマンドの実行ユーザ

知らなかった。 AT コマンドはシステムユーザで実行されるが、「タスク」の画面の詳細設定メニューで、AT実行時のユーザを指定できる!

Windowsでshbangを使って拡張子無しのファイルを実行する方法

ふとPATHEXEに.だけを追加するのを思いついてやってみたら意外なことにうまくいきました。 まず、システムのプロパティから、環境変数 PATHEXT の最後に ;. (セミコロンとピリオド)を追加します 次に、もしRubyがインストールされていなければインストール…

Firefoxのsqliteデータを圧縮するバッチ

Firefoxの起動・終了を速くするために、sqliteデータを再作成・圧縮するというのが流行っている?ようなので、乗ってみる。サイズを小さくするためには一度削除して再作成させるといいのだが、そこはそれ、データが失われるなど難しい。 すっきりしたい場合…

「数字列の先頭がゼロの時は八進数」で嬉しい人っているの?

%TIME%の先頭が、時刻が10時以前の時空白になるのは不便だと思っていたけど、そうなっている理由についさっき思い当たった。%TIME:~0,2% を取り出して、それだけを使って計算したり大小比較するときに先頭ゼロでない方が単純だ。今まで、YYYYmmddHHMMSS のよ…

絶対パス起動の謎

CMD

C:\temp>jpegtopnm a.jpg | pnmtopng > a.png jpegtopnm: WRITING PPM FILE C:\temp>C:\gnu\bin\jpegtopnm a.jpg | C:\gnu\bin\pnmtopng > a.png C:\gnu\bin\pnmtopng: Unable to create temporary file. mkstemp() failed with errno 22 (Invalid argument)…

「フォルダ解体コマンド」

CMD

久々のバッチスクリプト。というか、ブログ自体が2ヶ月ぶりか。ビデオレコーダーは、東芝RD機を使っているが、これには「フォルダ解体」という機能がある。フォルダの中のファイルを外に出して、フォルダを空にしてからそのフォルダを削除する。これは、Wind…

海外サイトにリンクされているのか?

CMD

http://otnx.jp/CMD/ のサイトに今月英語でのコメントが2件。いずれもお褒めの言葉をいただいた。 googleで翻訳して読んでいるようだけど、続いて2件来たと言うことはどこかにリンクされているのか?しかしgoogleのリンク検索では引っかからず。

for /f のバグ

CMD

NIFTYの掲示板より。また for /f のバグである。Win2000/SP4、WinXP/SP1,SP2で出る。2003は未確認。 コマンドプロンプトを開いて、このスクリプトを連続実行すると、不思議な現象が起こる。 @echo off for /f "usebackq tokens=1-4" %%A in ('aa bb cc dd') …

PHPバージョンアップにやられた

久しぶりに http://otnx.jp/CMD/ にアクセスしてみると、ページが表示されない。一覧は出るものの、どのページも空白である。もしや、クラッカーにやられたかとログを見てもそれらしき形跡は無いし、ファイルの中身も直接見るとちゃんとある。ふと、さくらイ…

ファイル名 " " の謎

CMD

ふと、WindowsXPで dir " " を打って見る。 C:\WINDOWS\TEMP>dir " " ファイル名または拡張子が長すぎます。 C:\WINDOWS\TEMP>type " " 指定されたパスが見つかりません。 C:\WINDOWS\TEMP>echo > " " 指定されたパスが見つかりません。少なくとも dir のは…

パス区切りの / (その1)

CMD

随分間が開いたがたまにはCMDネタも書かないと。C等でプログラムを書く時は、ファイルのパス区切り文字に \ だけでなく、/ も使えるわけだが、コマンドプロンプトからでは、/ はオプションの指定に使われているケースが多く、使えないことが多い。 しかし、…

はてなりんぐ

知らないうちに「はてなりんぐ」というものが出来ていた。SNSのコミュニティー相当な気がするが、はてなダイアリー以外のblogも参加できる。とりあえず、「CMDEXE」というリングを作ってみた。このページにリングへのリンクモジュールをつけてみたが、表示が…

あまりネタがない

CMD

アクセス解析(はてなカウンター)を見ていると、検索や、はてなキーワードからが多いのですが、ブックマークから来ていると思われるアクセスもそこそこあります。そういう人って、テレビ話が読みたいわけじゃなくて、CMD.EXE Tips が読みたいんですよね。多分…

net use /delete の失敗

CMD

net use X: \\host\share /user:watashi himitsu copy X:\not-exist-file . net use X: /delete を実行すると、かなりの確率で net use /delete が失敗する。copy が成功するケースでは失敗は起こらない(全く起こらないのかどうかは不明)。また、copy の後に…

%RANDOM% の初期値

CMD

最近TVの話が続いたので、久々に CMD ねたでも書いてみる。最近あまりねたを思いつかない。だれかお題を。%RANDOM% で乱数が得られるわけだが、これのシード値はどうなっているのか。 試してみると、なんと 時分秒 を元に作っているようである。しかも、時刻…

奥が深い構文解析

CMD

少し前に、http://otnx.jp/CMD/%C1%B4%C8%CC%2F%B9%BD%CA%B8%B2%F2%C0%CF に構文解析のことをまとめて終わった気になっていたが、まだまだのようだ。 for /f "delims=" %%A in ("echo ABC&date/t") do %%A →ABC&date/t と表示 for /f "delims=" %%A in ("ech…

【続】(echo)の空白付加の謎

CMD

id:otn:20041216 で、「(echo)の空白付加の謎」を書いたが、echo を括弧で囲んだ上にパイプで使うケースがあるのかという問題。例えば、TCP.EXE を使ってメールのチェックをするケース。 TCP.EXEは、"Mule for Win32" のバイナリパッケージに入っている。バ…

set /p の空白付加の謎

CMD

id:otn:20041216 で、「(echo)の空白付加の謎」というのを書いたが、 set