- 2021.4.1 移転しました...
-
- このページの旧URLは
http://www10.plala.or.jp/palm84/commandline.html
- このページの旧URLは
- 内容古いです!
-
最終更新日は 2012.3.20、ご注意。
リンク先テキストファイル (.txt) はブラウザで開くと文字化けするのでご注意。
2007.4.17 書き出したら切りがありません(orz)。絶賛校正しまくり中...
- 目次
2010.3.8 Windows 7 対応について確認中...
2010.6.3 00_Tool_download.bat などの一部URL,ファイル名を更新
2012.3.20 00_Tool_download.bat などの一部URL,ファイル名を更新,自作ばっち追加
最終更新日 2012.3.20
※Windows XP 用です。
あぁ私的、とっても私的(何)・・・
- お約束?
-
尚、ここのバッチファイルについては、はなはだ初心者レベルで大したことしてませんが、内容及び実行については、お約束の“at your own risk”ということで。少しずつでもよくなっていけたらいいなと思ってはいるのですが...
Vista 以降では
確認してません確認中です...。Windows 2000 でも一応は確認してますが自信ないです...。
これって何
Windows XP のコマンドラインで使えるツールのめも。定型処理はバッチファイルで。
インストール不要なので、USBメモリなどで持ち運びもおk。
他のPCでも環境を簡単に作れる、バッチファイル作成。ダウンロードなども自動。ってか、USBメモリにコピーしてあればイランけど...
...ってか、Linux では標準でできることばっかりだったりだなぁ...
...あっと、Windows の場合はコマンドの方が楽なんてことはほとんどないと思います。この目的はあくまでバッチファイルでの定型処理、及びプチUnix環境ってとこです。
基本ツールのリンク
どれもインストール不要で必要ファイルをコピーしただけで使えるもの。また、コマンドライン、バッチファイルでの実行ももちろん可能なツール類。
- UnZip
-
zip の展開。
unzip
.exeはUnxUtilsにも入ってるのに、なぜかというと...こっちは元々Win32版だし、配布ファイルが自己解凍式だから。(※ 後述のwget
.exeで自動ダウンロード&自動展開に使うため)※ってか、Windowsは標準コマンドでzip解凍できないのはなんだかなぁ。
- W32TeX
-
tar
.exe,gzip
.exe,bzip2
.exeなど。tar
コマンドでjオプションも使えます。(※UnxUtilsのはjオプションだめだった) - UnRAR for Windows
-
RARファイルの解凍。
UnxUtils なんかにも入ってますが、新しいほうが安全かなと。(※でもコマンドラインから解凍するのにはunrar.exeを使うのでUnxUtilsを先に入れとくというウロボロス...)
- CDRtoolsバイナリ
-
【注意】2012.3.20 現在、サイトはありますがファイルがリンク切れになってます。
※ Windows 7 / Vista 未確認。
mkisofs.exe
,cygwin1.dll
isoイメージの作成。BootableCDWizard BCDW マルチブートCDやISOLINUXのisoイメージ作成。
下記は 未確認ですがまぁまぁ新しい Windows 版
下記に古いですが Windows 版オリジナルがあります。
- dd for windows - chrysocome.net
-
※ Windows 7 / Vista では一部の機能は「管理者として実行」する必要があります。
dd
.exe。Windows用dd
コマンド。制限あるけどイメージの作成やFD書き込みに便利。- 注意点
-
- 制限あり
- Native Win32 ports of some GNU utilities (UnxUtils)
-
Unixコマンドがいっぱい。
sed
,split
,unzip
,unrar
,diff
,grep
など- 注意点
-
- Windowsの内部コマンドと一部重複(echo,mkdir,type などWin優先)
- PATHの設定に注意
- find,sort など重複する
- 日本語ファイル名など制限あり
- vfd (Virtual Floppy Drive)
-
vfd21-080206.zip
※ Windows 7 / Vista では「管理者として実行」しませう。(※
エクスプローラーではドライブ文字が出ませんが...ドライブ文字設定で「固定・グローバル」にチェックしないとドライブ文字は出ません)。64-bit 非対応。仮想FDドライブ。GUIもあり。実FDと違ってメチャ早いのでかなり便利。
- 注意点
-
- VMware Player など仮想マシンと同時使用すると危険かも?...Windowsがフリーズしました。
- もしかすると、Daemon Tools とかも同時使用すると危険なのかもしれないような関係ないような
- GRUB for DOS
-
ブートローダGNU GRUBの多機能版。これの起動ディスクは必需品?
- grubinst
-
※ Windows 7 / Vista 未確認。
Windows上でGRUBをインストール。GUI版もあり。
- The SYSLINUX Project - Syslinux Wiki
-
※ Windows 7 / Vista では「管理者として実行」しませう。
USBメモリにブートローダをインストール。ISOLINUX CDにメニューを入れたり。
- Universal Extractor | LegRoom.net
-
多種の書庫に対応した展開専用ツール。これの UniExtract Binary Archive はインストール不要、GUIもあり。というか小さなパッケージを集めてGUIを付けたようなかんじかな。
ISOイメージやFDイメージの展開も可能なんで便利。
- 注意点
-
- 対象ファイルのパスに日本語が含まれてるとだめみたい
- 安全面について
-
UnxUtilsに含まれるunzip,unrarやUniExtractに含まれるunrarなどバージョンがやや古い。
コマンドだから安全ということはないし、GUI最新版でも同様、信用できないファイルなど展開しないように注意しておくのが吉。圧縮・解凍ソフトの脆弱性はしょっちゅう見つかってるので...
サポート ツール
インストールが必要ですが(※コマンドの展開のみも一応できますけど...)、便利なコマンドがいっぱい。
filever.exe
-browstat.exe
-dskprobe.exe
- HDのセクタを直接見るextract.exe
- CAB ファイルからファイルを抽出(XPだけ?)
- Windows XP Service Pack 2
- Windows 2000 SP4 サポート ツール
-
2000標準では入っていない、
reg.exe
やtlist.exe
(tasklist),kill.exe
(taskkill)なども...
- リソースキット・ツール
-
- @IT:Windows TIPS -- Hints:Windows OS向けリソースキット・ツールを入手する
- Download details: Windows Server 2003 Resource Kit Tools
2003用ですが、XPでも一応使えてます。 robocopy は同期ができるのでバックアップにはxcopyなんかよりかなり便利。
wget.exe で環境準備
- 2021.1.18 追記
-
もう古いので動かないかもしれません。いずれは削除しますので... アシカラズ。
- 【ちょっと変更中...】
-
(使ってる人いないと思いますが、)ディレクトリ名を変更してるので以前のやつは動かないかも。PATHの設定が違ってくるので。
※バッチファイルは Windows XP 用なのでご注意。Vista以降では確認していません。
- wget
-
最新のSTABLEBinaries, Dependenciesをダウンロードして、wget用ディレクトリを作成、下記ファイルを展開する。\---wget libeay32.dll libiconv2.dll libintl3.dll libssl32.dll wget.exe
作業用ディレクトリに wget を準備すれば、自動ダウンロードするバッチファイルを作成。
- 00_Tool_download.bat(.txt)
- toollist.txt - ツールのチェックリスト(ディレクトリ名)
- url_list.txt - ツールのダウンロードURL
- 00_Command_only.bat(.txt)
- 2012.3.20 更新
-
ツール類のURLを更新。
適当なディレクトリ:. | 00_Tool_download.bat | 00_Command_only.bat | toollist.txt | url_list.txt | +---backup | +---download_files | \---wget libeay32.dll libiconv2.dll libintl3.dll libssl32.dll wget.exe
ダウンロード | 展開後 | |
* UnZip * | 404 KB | 584 KB |
* W32TeX * | 842 KB | 1.29 MB |
* UnRAR * | 192 KB | 199 KB |
* Virtual Floppy Drive * | 140 KB | 403 KB |
* cdrtools * | 2.60 MB | 5.75 MB |
* dd for Windows * | 187 KB | 356KB |
* SYSLINUX 4.05 * | 7.32 MB | 18.9 MB |
* GRUB for DOS(0.4.4) * | 800 KB | 1.57 MB |
* grubinst * | 68 KB | 177 KB |
* UnxUtils * | 3.20 MB | 6.17 MB |
* UniExtract Binary Archive * | 4.94 MB | 10.7 MB |
* Wget for Windows * | 2.18 MB | 2.83 MB |
計 | 約 23 MB | 約 49 MB |
SYSLINUX と UniExtract が容量デカイ。不要なら外した方がいいかも。 toollist.txt
内にないものはダウンロードしません。
再実行時について、toollist.txt
とディレクトリを照らし合わせ。展開済(\リストのディレクトリ名があっるかどうか)のものはダウンロード・再展開はしない。
ディレクトリ名はバージョン名なしに変更。更新ややこしいし。
適当なディレクトリ:. | | 00_Tool_download.bat | Command_only.bat | toollist.txt | url_list.txt | hogehoge.bat | hagehage.bat | kumakuma.bat | +---backup | +---cdrtools | +---dd | +---download_files | +---syslinux | +---texinst | +---uniextract | +---unrarw32 | +---UnxUtils | +---unz552xNunzipxN | +---vfd | \---wget
- 別の wget
-
※こっちは以前に使ってたやつ。ちょっと古いかな?
- Heiko Herold's windows wget spot
- THIS ONE: 1.10.2 complete をクリック
- wget-1.10.2b.zip
- [wgetフォルダ]を作成して、解凍したファイルをコピー
- 00_Tool_download.bat, toollist.txt , url_list.txt を[wgetフォルダ]の一つ上のディレクトリにコピー、実行するとツール類のダウンロードが始まり、勝手に展開します
- Heiko Herold's windows wget spot
自作バッチ
- 2021.1.18 追記
-
もう古いので動かないかもしれません。いずれは削除しますので... アシカラズ。
一応下記に置いてあります。
- 【すみませんすみません。。】
-
現在、
URLの変更やバージョンアップ(ファイル名変更)などでダウンロードできないものがあると思われます。後日修正致します。今やってるのですが一つ直すと次から次へなので、すみません。【2009.0707追記】だいたい修正しました。(筈ですが。。。)
「下手なやつが作ると、もう~」ですね。(滝汗)
※バッチファイルは Windows XP 用なのでご注意。Vista以降では確認していません。
上記の wget.exe 用に作った 作業ディレクトリに置いて実行すればいいはずです...
- FreeDOS スペシャル(謎)起動ディスク作成
- FDイメージ関連
- GRUB 起動ディスク
- MD5チェックサム
- ddコマンドでMBR・ブートセクタのバック
- ISOイメージの展開
- CDからISOイメージ作成
- SYSLINUX のインストール
マルチブートUSBメモリマルチブートCD/DVD
- vfd.exe (Virtual Floppy Drive) 使用時の注意点
-
VMware Player を起動するとWindowsがフリーズしてしまうことがありました。よって、 vfd.exe 使用時は他の仮想マシンなどを起動しないように注意。また、念の為、Daemon Tools などの仮想ドライブソフトも停止させた方が安全かもしれません。
バッチファイルでは、 vfd.exe 使用後はエラーのあるなしに関わらずアンインストール処理をしていますが、使用後はWindowsを再起動しておいた方がいいかもしれません。
※仮想ドライブのドライブ文字は、(V,W,X,Y,Z) から使用中でないものを一時割当します。その際に
reg.exe
でレジストリを見るのでWindows 2000 ではサポート・ツールが必要です。
FreeDOS スペシャル(謎)起動ディスク作成
後述...長いので(笑)。
FDイメージ関連
- FDイメージをファイルに展開
-
※ Windows 7 / Vista 確認(※ 64-bit はだめ)。
- 必要コマンド -
.\vfd\vfd.exe
※reg.exe でレジストリを見るので、Windows 2000 ではサポート・ツールが必要。
UniExtractでもできるし、他にもGUIツールはあるけど、ファイル名を確実に小文字で(大文字と区別して)出せるのはvfd.exeだけのような(Super ウルトラISOでは8.3形式)。バックグラウンドで一時マウントして展開。
- FDimage_to_Files.bat(.txt)
- 必要コマンド -
- FDからイメージファイル作成
-
※ Windows 7 32/64-bit 確認(※ Vista 未確認)。
- 必要コマンド -
dd.exe
ぶっちゃけ RawWrite for Windows の方が簡単かと。これは
dd.exe
で。- Floppy_to_Image.bat(.txt)
- 必要コマンド -
- FDイメージをFDへ書き込み
-
※ Windows 7 32/64-bit 確認(※ Vista 未確認)。
- 必要コマンド -
dd.exe
これも
dd.exe
で。- FDImage_to_Floppy.bat(.txt)
- 必要コマンド -
GRUB 起動ディスク
0.4.3 のイメージは配布されてないし...
- GRUB(for DOS)起動ディスク作成
-
※ Windows 7 32/64-bit 確認(※ Vista 未確認)。
- 必要コマンド -
grubinst.exe
- 必要ファイル - grldr
- 必要ファイル - menu.lst
直接FDへ書き込み
- GRUB_Floppy_Write.bat(.txt)
- 必要コマンド -
- GRUB(for DOS)起動ディスクイメージ作成
-
※ Windows 7 32-bit 確認(※ Vista 未確認、64-bit はだめ)。
- 必要コマンド -
grubinst.exe
- 必要コマンド -
.\vfd\vfd.exe
- 必要コマンド -
dd.exe
- 必要ファイル - grldr
- 必要ファイル - menu.lst
※reg.exe でレジストリを見るので、Windows 2000 ではサポート・ツールが必要。
dd.exe
で空イメージ作って、vfd.exe
をバックグランドで一時起動、マウントしてコピー。すべてイメージファイルへの操作。- GRUB_Image_Make.bat(.txt)
- 必要コマンド -
MD5チェックサム
- 右クリックの「送る」でごにょごにゅ
MD5チェックサムの計算と照合
23種類作ってます...
※チェックしたファイル名の付け方がいまいちだなぁ。なんかいい方法ないかな?
- 指定ディレクトリのファイル
-
※ Windows 7 / Vista 未確認。
- 必要コマンド -
md5sum.exe
- 必要コマンド -
diff.exe
(※サブディレクトリ除く)
指定ディレクトリのファイルのみ計算。md5sum ディレクトリを作成して md5.txt 保存。
照合は、指定ディレクトリのファイルのみ計算して .\md5sum.\md5_check.txt 作成。
diff
コマンドで .\md5sum\md5.txt と比較して .\md5sum\diff.txt 作成。※既存のチェックファイルもリネームして削除されないようにする。
- md5sum_make.bat(.txt)
- md5sum_check.bat(.txt)
- 必要コマンド -
- ディレクトリツリーを計算
-
※ Windows 7 / Vista 未確認。
- 必要コマンド -
md5sum.exe
- 必要コマンド -
diff.exe
サブディレクトリも含めて計算。実行元ディレクトリに md5sum.txt 作成。
照合は、現在の md5sum_check%now%.txt 作成。チェック済みファイルを指定して
diff
コマンドで照合。※既存のチェックファイルもリネームして削除されないようにする。
- md5sum_s_make.bat(.txt)
- md5sum_s_check.bat(.txt)
- 必要コマンド -
- 単一ファイルのチェック
-
※ Windows 7 / Vista 未確認。
- 必要コマンド -
md5sum.exe
MD5(記録)ファイルの値と実際値を照合します。MD5ファイルは同一ディレクトリに置きます。ダウンロードしたISOイメージの確認とかに。
- MD5ファイルの書式
1b8de822b8296471383feeaac1a64056 knoppix_v5.3.1CD_20080326-20080520.iso
- Check_MD5sum.bat(.txt)
- SHA1でチェック
-
※ Windows 7 / Vista 未確認。
openssl.exe が必要
- Downloads
- openssl.zip をダウンロード
openssl
ディレクトリを作業用ディレクトリにコピー
- SHA1ファイルの書式
4dccee9f0059434ef77dc2835dc9df10925a1cee knoppix_v6.0.1CD_20090208-20090225_opt.iso
- Check_SHA1sum.bat(.txt)
- 必要コマンド -
ddコマンドでMBR・ブートセクタのバックアップ
※ 2012.3.20 更新。Windows 7 / Vista 確認。64-bit もOK。
- 必要コマンド -
dd.exe
(dd for Windows) - 必要コマンド -
dd.exe
(UnxUtils) - 必要コマンド -
fsutil.exe
(XP以降)
dd for Windows は使用中パーティションのブートセクタ取得がだめみたいなので、UnxUtilsのやつで。fsutil.exe
はドライブ文字の確認のため。
- dd-dd-backup.bat(.txt)
HD/USBメモリのMBR及びPBR(EPBR除く)を保存します。
- MBR - 1セクタ
- MBR - 65セクタ(※ 第1パーティションの第2セクタまで)
- MBR - 2050セクタ(※ Vista以降向け - 第1パーティションの第2セクタまで)
- PBR - 1セクタ
- PBR - 16セクタ(※ NTFS用)
4KiBセクタの場合は
- MBR - 1セクタ
- MBR - 257セクタ(※ Vista以降向け - 第1パーティションの第1セクタまで)
- PBR - 1セクタ
- PBR - 10セクタ
※ 空のマルチカードリーダーなどがあるとエラーメッセージが出ることがあります。とりあえずキャンセルすれば実行はできます。
ISOイメージの展開
※ Windows 7 32/64-bit 確認(※ Vista 未確認)。
FDイメージの展開も可能ですが、DOSフォーマット (FAT) FDイメージでは、半角英数8文字以内のファイル名(※ 8.3形式等)は、すべて大文字となってしまうので注意。
- 必要コマンド -
.\uniextract\UniExtract.exe
作ってみたけど、GUIでやるのと同じなのであんまり意味なし。
GUIなら、7-zipやSuper ウルトラISOが内容の確認もできて便利ですけど、UniExtractはコマンドラインおkなのでバッチファイルに組み込めるということで。
- UniExtract_to_Files.bat(.txt)
- 対象ファイルのパスに日本語が含まれてるとだめみたいだ...
CDからISOイメージ作成
※ Windows 7 / Vista 確認。64-bit もOK。
- 必要コマンド -
dd.exe
まぁこの辺もGUIで簡単にできますけど、ddコマンドは結構早いような気もします。
※reg.exe でレジストリを見るので、Windows 2000 ではサポート・ツールが必要。
- CD_to_ISO.bat(.txt)
ddでいいのかなと確認してみた。mkisofs.exeでiso作成→CD焼き→CDからiso作成で、MD5は一致したので大丈夫みたい。
SYSLINUX のインストール
※ Windows 7 / Vista 確認。64-bit もOK。
- 必要コマンド -
syslinux.exe
USBメモリのブートローダに
※reg.exe でレジストリを見るので、Windows 2000 ではサポート・ツールが必要。
レジストリでリムーバブル メディアのドライブ文字を検索、ドライブを選択してインストール。
- SYSLINUX_Install.bat(.txt)
下記は、syslinux.exe と バッチをUSBメモリのルートなどに置いて実行するだけ。USBメモリ自身にインストール。
FreeDOS スペシャル(謎)起動ディスク作成
この起動ディスクの詳細は下記ページにて...
上記ページ起動ディスクの、ダウンロードからFD書き込みまで自動の簡単作成バッチ作ってみた。
- 必要ファイルの自動ダウンロード
- 起動ディスク・イメージファイル作成
- イメージファイルをFDへ書き込み
- LiveCDのカーネルを分割して、FDへ連続コピー
- GRUB for DOS
- ネットワークブート用起動ディスクとして
- BG-Recue Linux ブートディスクとして(+2枚FDが必要)
- Memtest86+
さらに、GRUBで作りこみすると、PLoP Boot Manager なども 1枚のFDへ組み込み可能(※1枚のFD内に複数のFDイメージを組み込み可能ってこと)。
作成バッチファイル
※ Windows 7 / Vista 未確認。64-bit だめ。
- 下記分が必要
- UnZip (unzip.exe)
- W32TeX (tar.exe,bzip2.exe)
- Virtual Floppy Drive (vfd.exe)
- dd for Windows (dd.exe)
- GRUB for DOS (grub.exe)
上記のwget.exeで準備してあれば、順番に実行するだけで作成できるはずですが...
- 1_Fdos_SCL_DL.bat(.txt) - 必要ファイルをダウンロード
- 2_Fdos_SCL_Make.bat(.txt) - イメージファイル作成
- ※注:DOS用USBドライバはコピーしません
- 3_Fdos_SCL_FDwrite.bat(.txt) - イメージをFDへ書き込み
- 4_Fdos_SCL_split_FD.bat(.txt) - (必要なら)LiveCDブート用のカーネル分割FD作成
コマンド・オプション
help表示は、/?
, -h
, --help
, -help
wget.exe
wget -nc -P "%down_dir%" --passive-ftp URL
-i "%listfile%"
- URLファイルを指定-P
- 保存ディレクトリ指定-nc
- 既存ファイルはダウンロードしない--passive-ftp
- パッシブFTP-o log.txt
- ログ上書-a log.txt
- ログ追記
- 参考リンク
unzip.exe
- 内容表示
unzip -l "grub_for_dos-0.4.1.zip"
- 展開先指定
unzip.exe "zipfile" -d "%down_dir%"
- 特定のファイルのみ展開
-
ファイル名を先に指定
unzip.exe "zipfile" "grub_for_dos-0.4.1/grub.exe" -d "%down_dir%"
ディレクトリがある場合はディレクトリも作られる
- zip.exe
-
zip -j filename.zip "file1" "file2"
ファイルへのパスを指定している場合はディレクトリも含めて作成されるので、ファイルのみアーカイブするには
-j
オプション。
tar.exe
- 内容表示
-
t
指定(j
はbzip、z
はgzip)tar.exe jtf "bzipfile"
ディレクトリも作成される
- 展開先を指定
-
展開は
x
指定。-C
でディレクトリ指定tar.exe jxvf "bzipfile" -C "%down_dir%"
- 特定のファイルのみ展開
-
ファイル名を後に指定
tar jxvf %down_dir%\fc5fd.tar.bz2 -C %down_dir% "FC5-FloppyInstall-1.img" tar.exe jxvf "bzipfile" -C "%down_dir%" "pxe-on-a-disk/pxe-on-a-disk.floppy"
ディレクトリも作成される
gzip.exe(gunzip.exe)
ファイルのあるディレクトリに展開(圧縮)
c
で標準出力、 d
で解凍、リダイレクトでファイル作成。( l
で内容表示)
gzip -dc "%down_dir%\floppy.img.gz" > "%down_dir%\floppy.img"
標準出力してリダイレクトしないと元のファイルはなくなる。
bzip2.exe(bunzip2.exe)
d
で解凍、k
は元ファイルを消さない
ファイルのあるディレクトリに展開(圧縮)
bzip2.exe -dk "bzipfile"
作成場所を指定するには c
で標準出力してリダイレクトを使う
UnRAR.exe
x
でカレントディレクトリに書庫内そのまま展開。e
だとフォルダ無視してカレントディレクトリにファイルのみ展開。( t
で内容表示)
unrar.exe x "%down_dir%\rarfile.rar"
元ファイルは残る。
- 展開先指定
unrar.exe x "%down_dir%\rarfile.rar" "path"
- 特定のファイルのみ
unrar.exe x "%down_dir%\rarfile.rar" "path\filename" "path"
Windows コマンド
- コマンド ライン リファレンス
- if コマンド
- Path
- 遅延環境変数
- 特殊文字の扱い
- サブルーチン
- set
- pushd / popd
- findstr.exe
- xcopy.exe
- regedit.exe
- reg.exe
- regini.exe (XP)
- INFファイルでレジストリ設定 (Rundll32)
- ipconfig.exe
- netsh.exe
- fsutil.exe (XP)
- sc.exe (XP)
コマンド ライン リファレンス
- コマンド ライン リファレンス(Windows Server 2003)
- リダイレクト演算子
-
- 出力の非表示(
nul
デバイス) -
- 標準出力をnulへ -
>nul
- 標準エラー出力をnulへ -
2>nul
- 両方nulへ -
>nul 2>nul
,>nul 2>&1
- 標準出力をnulへ -
- ファイルへ出力
-
- 標準出力をファイルへ追記 -
>>"%logfile%"
>>"%logfile%" (COMMAND1)
- 標準エラー出力をファイルへ追記 -
2>>"%logfile%"
2>>"%logfile%" (COMMAND1)
- 両方をファイルへ追記 -
>>"%logfile%"
>>"%logfile%" (COMMAND1 2>&1)
- 標準出力をファイルへ追記 -
- 出力の非表示(
if 構文
- ERRORLEVEL
-
if ERRORLEVEL 1
- ERRORLEVEL が1以上ならif not "%ERRORLEVEL%"=="0"
- %ERRORLEVEL% が0以外なら
同じ意味のようであるが、下記の場合など違ってくる
環境変数
%ERRORLEVEL%
は(行の)コマンド実行前のものであるため、Command1のエラーがわからないCommand1 & if "%ERRORLEVEL%"=="0" Command2
Command1のエラーがわかる
Command1 & if ERRORLEVEL 1 Command2
- エラーなしの場合...
if not ERRORLEVEL 1
- ERRORLEVEL が0なら(1以上でない)if "%ERRORLEVEL%"=="0"
- %ERRORLEVEL% が0なら
- defined
if defined hoge echo hage
下記と同義になりますが、ERRORLEVEL 同様で構文内でも遅延展開。後者では構文内では問題出るかも。。
if not "%hoge%"=="" echo hage
- 分岐処理
-
- ファイルの存在を確認
if exist "%filename%" ( echo ありますた! ) else ( echo ないですYO! )
- エラー処理
if ERRORLEVEL 1 ( echo エラー出ますた!orz ) else ( echo 正常終了しますたYO! )
Path
Path
コマンド-
システム環境変数PATHの表示
C:\>path PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32\Wbem;C:\Program Files\Windows Resource Kits\Tools\;C:\Perl\bin\;C:\Program Files\Common Files\Roxio Shared\DLLShared;C:\Program Files\Support Tools\;C:\Program Files\Windows Imaging\
リストの先頭に近いものが優先
set path=C:\hoge;%path%
下記と同義
path=C:\hoge;%path%
- コマンドをフルパスで表示
C:\>for /f "delims=" %I in ("robocopy.exe") do echo %~$PATH:I C:\Program Files\Windows Resource Kits\Tools\robocopy.exe
遅延環境変数
if や for など構文内で環境変数を使う場合の注意点。既定では「遅延環境変数の展開」が無効(「即時展開」が有効)なので環境変数の値はコマンド実行時(実行前)のものが展開される。構文内でsetしても反映されない。
if ERRORLVEL
の場合は関数なので for 文内でも有効、if defined
も問題ないですね。もしくは、&&
や ||
を使う手もあるかな。
- CMD.EXEの遅延環境変数の展開 - KOBUN
setlocal enabledelayedexpansion
@echo off set hoge=Heloo if defined hoge set hoge=Good-bye & echo %hoge% echo %hoge% echo. setlocal enabledelayedexpansion set hoge=Heloo if defined hoge set hoge=Good-bye & echo !hoge! echo %hoge% endlocal echo. pause
結果は...
Heloo Good-bye Good-bye Good-bye
【注意】endlocal を打ってしまうとと setlocal
内で設定が無効になる。バッチ終了まで有効にするには endlocal は打たない。
条件付き処理記号 &&
だと...
C:\>set aaa=bbb C:\>set aaa=ccc & echo %aaa% bbb C:\>set aaa=ccc && echo %aaa% ccc
サブルーチンでも問題ないみたい。
for %%x ウンタラ~ ( set hoge=%%x && call :NANTOKA )
特殊文字の扱い
- 特殊文字のクォート
-
文字として出力させる
@echo off echo ^^ echo ^< echo ^> echo ^| echo ^< echo < pause
^ < > | < ECHO は <OFF> です。
- バッチファイ内での
%
-
単独の%は無視(削除)される
@echo off echo % echo %% echo %%% echo %%%% echo %%%%% echo %%%%%% echo %%%%%%% echo %%%%%%%% echo %%%%%%%%% echo %%%%%%%%%% pause
ECHO は <OFF> です。 % % %% %% %%% %%% %%%% %%%% %%%%%
環境変数を入れ子にすると...
@echo off set aaa=bbb set bbb=ccc echo %aaa% echo %%aaa%% echo %%%aaa%%% echo %%%%aaa%%%% echo %%%%%aaa%%%%% echo %%%%%%aaa%%%%%% pause
bbb %aaa% %bbb% %%aaa%% %%bbb%% %%%aaa%%%
遅延環境変数の展開を有効にすると...
@echo off set aaa=bbb set bbb=ccc setlocal enabledelayedexpansion echo %aaa% echo !%aaa%! pause
bbb ccc
サブルーチン
- 連載:Windows 2000コマンドライン徹底活用 第4回 スクリプト入門 (その2) -- 1.ジャンプ(gotoステートメント)
- 連載:Windows 2000コマンドライン徹底活用 第4回 スクリプト入門 (その2) -- 2.サブルーチン(callステートメント)
set
- 値にスペースや特殊文字は引用符で囲んでみる
set "filename=aaa bbb.txt"
set 変数の一部
で変数の列挙が可能
C:\>set file file1=aaa.txt file2=bbb.txt file3=ccc.txt
pushd / popd
cd
(cd /d
) コマンドよりかなり便利です。
- Pushd
- Popd
- Pushd(Windows 2000 コマンド リファレンス)
- PUSHD コマンドを使用して Windows 2000 でコマンド プロンプトで、UNC パスにアクセスする方法
findstr.exe
- ユニコードのファイルは検索できない?
-
みたいです。findコマンドを使うか、typeコマンドでShift_JISファイルに変換コピーするとか。
type Unicode.txt>Shift_JIS.txt
xcopy.exe
C:\hoge
ディレクトリをD:\hoge
としてコピーしたい場合は /i オプション(及びサブディレクトリ指定の /s/e)を付ける
xcopy C:\hoge D:\hobe /i/s/e/h/r/k/y
xcopy C:\hoge D:\
などとすると、C:\hogeの内容はD:\直下にコピーされてしまうので注意。
regedit.exe
- Microsoft Windows レジストリの説明
- 登録エントリ (.reg) ファイルを使用してレジストリ サブキーおよび値を追加、変更、または削除する方法
- regeditのコマンドラインオプション
- Windows XP および Windows Server 2003 のレジストリ エディタの機能を使用する方法
- レジストリエディタからエクスポート(または書き出し)した場合はユニコード(UTF-16)
- エクスポート - ASCII で(※ファイルはShift_JISで保存される)
regedit /e /a "dhcp_temp.txt" "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dhcp"
- エクスポート - ユニコード (UTF-16)
regedit /e "dhcp_temp.txt" "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dhcp"
- 適用(※ユニコード + 【REG_EXPAND_SZ】を使う場合は '
REGEDIT4
'ではだめらしい?)
> set_temp.reg echo Windows Registry Editor Version 5.00 >>set_temp.reg echo. >>set_temp.reg echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dhcp] >>set_temp.reg echo "Start"=dword:00000002 regedit /s set_temp.reg
- ユニコードについての注意
-
値エントリの種類が【REG_EXPAND_SZ】の場合にASCIIでエクスポートすると、ユニコードの1バイト目が切り取られてしまうようです。よって、日本語などASCII文字以外を含む【REG_EXPAND_SZ】値を復元する際には注意。つまり、ASCIIでエクスポートしたレジストリファイルでは、日本語【REG_EXPAND_SZ】値は正常に復元できません。(※文字列値【REG_SZ】では問題ないと思います)
- regedit.exe の無効化
-
マルウェア感染時などregedit.exeが起動できないことがよくあります。(※或いは管理者によって使用禁止に設定されている場合も)
REGEDIT4 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System] "DisableRegistryTools"=dword:00000001
DisableRegistryTools
の 値が 1 ならサイレント モード(※コマンドラインからregedit /s
)での実行は可能ですが、値が2 だとすべて実行不可になりました。値が2 の場合は、修正は下記の方法になるかな...
- infファイル作成して、 Rundll32.exe を実行(※使えれば)
- vbsファイルを実行
- reg.exe の実行(※使えれば)
設定変更などができない場合は、アクセス許可(※拒否設定は優先される)及び所有者などの確認が必要になります。アクセス許可の変更は、 Regini.exe (XP)や Regperm.exe で可能。
- regedit.exe を実行するとメモ帳が起動する
-
或いは何も起動しない場合などは...下記のような不正なレジストリが設定されているかもしれません。
REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe] "Debugger"="notepad.exe"
キーの削除、または
Debugger
エントリの削除が必要。削除するにはいずれかの方法でできるかな...
- regedit.exe をリネーム・コピーして実行
- infファイル作成して、 Rundll32.exe を実行(※使えれば)
- vbsファイルを実行
- reg.exe の実行(※使えれば)
上記の例と同じく、レジストリキーのアクセス許可の確認も必要になるかも。
reg.exe
Windows 2000 で reg.exe を使うにはサポートツールのインストールが必要
- @IT:Windows TIPS -- Tips:コマンド・プロンプトでレジストリを操作する
- コマンド・ラインからレジストリを操作するツール「reg.exe」を使ってダブル・クォーテーション・マーク「"」やパーセント・マーク「%」を入力するにはどうすればよいですか?:ITpro
- Windows 2000 SP4 サポート ツール
標準出力可能。長い REG_BINARY
値もカンマ・改行区切りなしの1行で出力(regedit
ではカンマ・改行区切りなので長い値を検索できないことがある)。
reg query HKLM\SYSTEM\MountedDevices
- regeditファイル形式でエクスポート
reg export "HKLM\SYSTEM\MountedDevices" "MountedDevices.reg.txt"
- regedit形式ファイルをインポート
reg import "MountedDevices.reg"
- 値エントリの修正
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableRegistryTools /t REG_DWORD /d "0x00000000" /f
- 値エントリの削除
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableRegistryTools /f
- データ取り出し
-
- サブキー列挙
C:\>reg query HKU | findstr HKEY_USERS\ HKEY_USERS\.DEFAULT HKEY_USERS\S-1-5-19 HKEY_USERS\S-1-5-19_Classes HKEY_USERS\S-1-5-20 HKEY_USERS\S-1-5-20_Classes HKEY_USERS\S-1-5-21-1960408961-507921405-1343024091-1014 HKEY_USERS\S-1-5-21-1960408961-507921405-1343024091-1014_Classes HKEY_USERS\S-1-5-18
- 値のデータの取り出し
C:\>set key=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders C:\>set value=cache C:\>for /f "usebackq tokens=3,*" %H in (`reg query "%key%" /v %value% ^| findstr "%value% REG_"`) do @echo %H %I %USERPROFILE%\Local Settings\Temporary Internet Files
- for 実行時のトークンについて
-
出力が Windows XP では Tab 区切り、7 ではスペース区切りとなってますね。デリミタ無指定だとトークン文字は Tab とスペースとなるので両方イケそうに思われますが...
XPなら Tab 指定でおkですが、7 では値エントリ名にスペースがあるとトークンの番号がズレちゃいますよねー。どうしたらいいんでしょうか。わかりませぬ... orz
regini.exe (XP)
※Windows 2000 ではリソース キットが必要?
レジストリキーのアクセス許可設定変更。
マルウェア感染時など、不正レジストリキーの削除時などに必要になるかも。
- 注意点
- サブキーにアクセス許可がない、または、削除拒否設定がある場合は親キーは削除できない
- Everyoneに削除拒否設定される場合があるので、確実に置換する
- ユーザに読み取り許可がない場合は設定はロードされない(つまりレジストリの設定内容は無視)
- 書式
-
- 基本
regini <スクリプトファイル>
- スクリプトファイル
\registry\machine\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe [1 17] \registry\machine\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.com [1 17]
※System と Administrators にフルコントロール設定。それ以外は削除。(※Everyone:削除拒否の 置換(消去)もこれで可能)
- 1 - Administrators フル アクセス
- 2 - Administrators 読み取りアクセス
- 3 - Administrators 読み取りおよび書き込みアクセス
- 4 - Administrators 読み取り、書き込み、および削除アクセス
- 17 - System フル アクセス
- 18 - System 読み取りおよび書き込みアクセス
- Regperm
-
regperm /K "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe" /A:System:F /A:Administrators:F /A:USERS:R /R
※Everyone:削除拒否の 置換(消去)もこれで可能。但し、
/R
でサブキーへの適用も可能みたいですが、サブキーにEveryone拒否設定のみあるとかだとややこしいかも?
アクセス許可があれば、INFファイルの使用、または、 regedit2 /s DelBadKey.reg
(※念の為に regedit.exe をリネーム・コピーしてコマンドラインから実行する)とかすれば削除可能になるはず...かな?
- 雑記
-
Image File Execution Options
に不正キーが作成されると regedit が実行できなくなる場合があるけど、登録名以外のものにリネーム・コピーすれば実行可能になるかもPolicies
キーのDisableRegistryTools
エントリを有効化されると、リネームしてもGUIのレジストリ エディタは起動できないけど、値が 1 ならコマンドラインからregedit /s regファイル
の実行は可能(値が 2 だとコマンドラインもだめ)- Rundll32.exe が不正(或いは不正設定)な場合、INFファイルの使用はだめかも
DisableRegistryTools
エントリの無効化は HijackThis 使うほうがいいかも...ってか、 マルウェア感染が原因ならこれだけ治してもだめで 、Silent Runnersとかで調べないとって話になりますけれども...。
INFファイルでレジストリ設定 (Rundll32)
infファイルを右クリック【インストール】、または、コマンドラインから Rundll32.exe
実行。
- REGEDIT.EXEとREGEDT32.EXEの使い分け
- @IT:運用 :システム管理者のためのXP SP2展開計画 第2回 Windowsファイアウォールの管理 2.INFファイル/レジストリによる設定
- infファイルで Image File Execution Options の不正なキーを削除する例
[Version] Signature="$Chicago$" [DefaultInstall] DelReg=DelImageEx [DelImageEx] HKLM, "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe"
rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 .\DelImageEx.inf
ファイル名にパスの指定が必須みたい。
※バージョンはホントは
$Windows NT$
にすべきなのかな?- 不正な値エントリを削除する例
-
上記では、サブキーに削除許可がないと削除できないので、値エントリだけ削除する。
[Version] Signature="$Chicago$" [DefaultInstall] DelReg=DelImageEx [DelImageEx] HKLM, "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe",Debugger
rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 .\DelImageEx.inf
- レジストリ エディタの有効化
-
正確には起動禁止設定の無効化
[Version] Signature="$Chicago$" [DefaultInstall] AddReg=UnhookRegKey [UnhookRegKey] HKCU, Software\Microsoft\Windows\CurrentVersion\Policies\System,DisableRegistryTools,0x00000020,0
rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 .\EnabeleRegedit.inf
[Version] Signature="$Chicago$" Provider=Symantec [DefaultInstall] AddReg=UnhookRegKey [UnhookRegKey] HKLM, Software\CLASSES\batfile\shell\open\command,,,"""%1"" %*" HKLM, Software\CLASSES\comfile\shell\open\command,,,"""%1"" %*" HKLM, Software\CLASSES\exefile\shell\open\command,,,"""%1"" %*" HKLM, Software\CLASSES\piffile\shell\open\command,,,"""%1"" %*" HKLM, Software\CLASSES\regfile\shell\open\command,,,"regedit.exe ""%1""" HKLM, Software\CLASSES\scrfile\shell\open\command,,,"""%1"" %*" HKCU, Software\Microsoft\Windows\CurrentVersion\Policies\System,DisableRegistryTools,0x00000020,0
0x00000
- REG_SZ(文字列)0x10001
- REG_DWORD(整数値)0x20000
- REG_EXPAND_SZ(環境変数を含む文字列)0x10000
- REG_MULTI_SZ(複数文字列)0x00001
- REG_BINARY(バイナリ)0x20001
- REG_NONE(上書しない)
※該当キーにアクセス許可がない、または拒否設定されている場合は使えないので注意。
ipconfig.exe
ERRORLEVEL
を返さないのでメッセージから判断する?
- ipconfig
-
- Windows XP
Windows IP Configuration Ethernet adapter ローカル エリア接続: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 192.168.0.2 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.0.1 Ethernet adapter ローカル エリア接続 2: Media State . . . . . . . . . . . : Media disconnected Ethernet adapter ワイヤレス ネットワーク接続: Media State . . . . . . . . . . . : Media disconnected
- Windows 7
Windows IP 構成 イーサネット アダプター ローカル エリア接続: 接続固有の DNS サフィックス . . . : リンクローカル IPv6 アドレス. . . . : fe80::5037:xxxx:xxxx:xxxx%11 IPv4 アドレス . . . . . . . . . . : 192.168.0.7 サブネット マスク . . . . . . . . : 255.255.255.0 デフォルト ゲートウェイ . . . . . : 192.168.0.1 Tunnel adapter isatap.{CC568812-F1C2-xxxx-xxxx-xxxxxxxxxxxx}: メディアの状態. . . . . . . . . . : メディアは接続されていません 接続固有の DNS サフィックス . . . : Tunnel adapter ローカル エリア接続*: 接続固有の DNS サフィックス . . . : IPv6 アドレス . . . . . . . . . . . : 2001:0:xxxx:xxxx:xxxx:xxx:xxxx:fff8 リンクローカル IPv6 アドレス. . . . : fe80::xxxx:xxx:xxxx:fff8%13 デフォルト ゲートウェイ . . . . . : ::
- Windows 2000(※ローカル エリア接続 4 は無線LAN)
Ethernet adapter ローカル エリア接続 4: Media State . . . . . . . . . . . : Cable Disconnected Ethernet adapter ローカル エリア接続: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 192.168.0.4 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.0.1 Ethernet adapter ローカル エリア接続 3: Media State . . . . . . . . . . . : Cable Disconnected
- ipconfig /release
-
- ipconfig /release "接続名" 成功
-
ipconfig /release "%iface%"
- Windows XP
Windows IP Configuration Ethernet adapter ローカル エリア接続 2: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 0.0.0.0 Subnet Mask . . . . . . . . . . . : 0.0.0.0 Default Gateway . . . . . . . . . : >ipconfig /release "%iface%" Windows IP Configuration IP Address for adapter ローカル エリア接続 2 has already been released.
- Windows 7
Windows IP 構成 イーサネット アダプター ローカル エリア接続: 接続固有の DNS サフィックス . . . : リンクローカル IPv6 アドレス. . . . : fe80::xxxx:xxxx:xxxx:xxxx%11 デフォルト ゲートウェイ . . . . . : Tunnel adapter isatap.HOGE-NETWORK: メディアの状態. . . . . . . . . . : メディアは接続されていません 接続固有の DNS サフィックス . . . : Tunnel adapter ローカル エリア接続*: 接続固有の DNS サフィックス . . . : IPv6 アドレス . . . . . . . . . . . : 2001:0:xxxx:xxxx:xxxx:xxx:xxxx:ff36 リンクローカル IPv6 アドレス. . . . : fe80::xxxx:xxx:xxxx:xxxx%13 デフォルト ゲートウェイ . . . . . : ::
- Windows 2000
Windows 2000 IP Configuration IP address successfully released for adapter "ローカル エリア接続 2" >ipconfig /release "%iface%" Windows 2000 IP Configuration IP Address for adapter ローカル エリア接続 2 is already released
- ipconfig /release "接続名" ケーブル(or 無線)未接続
-
- Windows XP
No operation can be performed on ローカル エリア接続 2 while it has its media disconnected
- Windows 7
メディアが接続されていないと、ローカル エリア接続 に対する処理はいずれも実行でき ません。
- Windows 2000
No operation can be performed on adapter ローカル エリア接続 2 as this connection has its media/cable disconnected.
※よくわかってませんが、下記はWindows 2000でAPIPAによって自動プライベートIPアドレスが振られている場合に出るようです(無線LANのユーティリティを入れてないとか)。
All adapters bound to DHCP do not have DHCP addresses. The addresses were autom atically configured and can not be released. Adapter ローカル エリア接続 2 was automatically configured and does not currentl y have a DHCP address. The IP address for this adapter can not be released.
- ipconfig /release DHCP有効な接続名なし
-
- Windows XP
The operation failed as no adapter is in the state permissible for this operation.
- Windows 7
インターフェイス Loopback Pseudo-Interface 1 の解放中にエラーが発生しました: 指 定されたファイルが見つかりません。 この処理に対して許容される状態のアダプターが存在しないため、 処理に失敗しました。
- Windows 2000
Error: No adapters bound to TCP/IP are enabled for DHCP
- ipconfig /release "接続名" 指定接続名DHCP無効
-
- Windows XP
Adapter ローカル エリア接続 2 is not enabled for Dhcp.
- Windows 7
アダプター ローカル エリア接続 が DHCP に対して有効ではありません。
- Windows 2000
Error: Release Adapter "ローカル エリア接続 2" is not enabled for DHCP
- ipconfig /renew "接続名"
-
- 【成功】ipconfig /renew "接続名"
-
- Windows XP
Ethernet adapter ローカル エリア接続 2: Connection-specific DNS Suffix . : hoge-network IP Address. . . . . . . . . . . . : 192.168.0.219 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.0.1
- Windows 7
イーサネット アダプター ローカル エリア接続: 接続固有の DNS サフィックス . . . : HOGE-NETWORK リンクローカル IPv6 アドレス. . . . : fe80::xxxx:xxxx:xxxx:xxxx%11 IPv4 アドレス . . . . . . . . . . : 192.168.0.201 サブネット マスク . . . . . . . . : 255.255.255.0 デフォルト ゲートウェイ . . . . . : 192.168.0.1 Tunnel adapter isatap.{CC568812-xxxx-xxxx-xxxx-xxxxxxxxxxxx}: メディアの状態. . . . . . . . . . : メディアは接続されていません 接続固有の DNS サフィックス . . . : Tunnel adapter ローカル エリア接続*: 接続固有の DNS サフィックス . . . : リンクローカル IPv6 アドレス. . . . : fe80::xxxx:xxx:xxxx:xxxx%13 デフォルト ゲートウェイ . . . . . : ::
- Windows 2000
Ethernet adapter ローカル エリア接続 2: Connection-specific DNS Suffix . : hoge-network IP Address. . . . . . . . . . . . : 192.168.0.207 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.0.1
- ipconfig /renew "接続名" (DHCPサーバの応答なし)
-
- Windows XP
An error occurred while renewing interface ローカル エリア接続 2: unable to contact your DHCP server. Request has timed out.
- Windows 7
インターフェイス ローカル エリア接続 の更新中にエラーが発生しました: DHCP サーバ ーに接続できません。要求がタイムアウトしました。
- Windows 2000
The following error occurred when renewing adapter ローカル エリア接続 2: DHCP Ser ver unreachable
netsh.exe
- DHCPクライアント有効
netsh interface ip set address "ローカル エリア接続" dhcp netsh interface ip set dns "ローカル エリア接続" dhcp
- 固定
netsh interface ip set address "ローカル エリア接続" static 192.168.0.2 255.255.255.0 192.168.0.1 1 netsh interface ip set dns "ローカル エリア接続" static 192.168.0.1 netsh interface ip add dns "ローカル エリア接続" 192.168.0.10
- 設定の保存(書き出し)
netsh -c interface dump > start.nsh
- 設定の復元(読み込み)
netsh -f start.nsh
- 設定されているゲートウェイにPing
C:\>netsh diag ping gateway デフォルト ゲートウェイ 1. [00000001] VIA Compatable Fast Ethernet Adapter DefaultIPGateway = 192.168.0.10 同じサブネット Pinging 192.168.0.10 with 32 bytes of data: 192.168.0.10 からの応答: バイト=32 time<1ms TTL=0 192.168.0.10 からの応答: バイト=32 time<1ms TTL=0 192.168.0.10 からの応答: バイト=32 time<1ms TTL=0 192.168.0.10 からの応答: バイト=32 time<1ms TTL=0 Ping 統計情報 - 192.168.0.10: パケット: 送信 = 4, 受信 = 4, 損失 = 0 (0% 損失) 往復にかかったおよその時間 (ミリ秒単位): 最小 = 0ms, 最大 = 0ms, 平均 = 0ms
- 設定されているDNSサーバにPing
C:\>netsh diag ping dns DNS サーバー 1. [00000001] VIA Compatable Fast Ethernet Adapter DNSServerSearchOrder = 192.168.0.10 Pinging 192.168.0.10 with 32 bytes of data: 192.168.0.10 からの応答: バイト=32 time<1ms TTL=0 192.168.0.10 からの応答: バイト=32 time<1ms TTL=0 192.168.0.10 からの応答: バイト=32 time<1ms TTL=0 192.168.0.10 からの応答: バイト=32 time<1ms TTL=0 Ping 統計情報 - 192.168.0.10: パケット: 送信 = 4, 受信 = 4, 損失 = 0 (0% 損失) 往復にかかったおよその時間 (ミリ秒単位): 最小 = 0ms, 最大 = 0ms, 平均 = 0ms
fsutil.exe (XP)
内蔵ドライブ、使用中リムーバブル、使用中ネットワークドライブを検出
D:\CommandLine>fsutil fsinfo drives ドライブ: A:\ C:\ D:\ E:\ F:\ G:\ H:\ Z:\
drivetype
を表示
D:\CommandLine>fsutil fsinfo drivetype c: c: - 固定ドライブ D:\CommandLine>fsutil fsinfo drivetype g: g: - CD-ROM ドライブ F:\CommandLine>fsutil fsinfo drivetype j: j: - リムーバブル ドライブ D:\CommandLine>fsutil fsinfo drivetype z: z: - リモート ドライブまたはネットワーク ドライブ
sc.exe (XP)
for 構文
環境変数をセット・置換
- 連載:Windows 2000コマンドライン徹底活用 第7回 forコマンド(その1) -- 1.forコマンドの基本
- 連載:Windows 2000コマンドライン徹底活用 第7回 forコマンド(その1) -- 2.for変数の修飾子
- 連載:Windows 2000コマンドライン徹底活用 第7回 forコマンド(その1) -- 3.forステートメントの基本的な使い方
- set file=boot.img
-
for %I in (%file%) do set foo=%~dpnxI
%~dpnxI
-C:\CommandLine\boot.img
%~I
- 引用符"
があれば削除%~fI
- 完全パス (C:\CommandLine\boot.img
)%~dI
- ドライブ文字のみ (C:
)%~pI
- パスのみ (\CommandLine\
)%~nI
- ファイル名のみ (boot
)%~xI
- 拡張子のみ (.img
)%~tI
- 更新日時 (2007/02/26 20:19
)%~zI
- ファイルのサイズ (1474560
)%~aI
- ファイルの属性 (--a------
)
- コマンドのパスを表示 -
%~$PATH:I
set xxx=regedit.exe for %I in (%xxx%) do echo %~$PATH:I C:\WINDOWS\regedit.exe
- 相対ディレクトリパスを絶対パスに置換
C:\CommandLine\dd-0.5>set dir=..\ C:\CommandLine\dd-0.5>for %I in ("%dir%") do set dir=%~dpI C:\CommandLine\dd-0.5>set dir=C:\CommandLine\
この場合、末尾の \
に注意しておくこと
- 環境変数に 空白があり、引用符がある時ない時を考えて
-
set /p
でエクスプローラからドラッグした場合など、引用符がある時ない時両方で使うset /p target= [キャンセル は qq ] : for /f "usebackq delims=" %%I in ('%target%') do set target=%%~I if /i "%target%"=="qq" GOTO CANCEL if "%target%"=="" set target=%cd% for /f "delims=" %%I in ("%target%") do set target=%%~fI if not exist "%target%" echo %target% はありません && GOTO CHOICE
2行目は
if defined target set target=%target:"=%
とかの方がいいのかな?...
/F オプション - ファイルの内容解析
文字列、コマンドの内容などでも。
記号 | なし | ダブルクォート | シングルクォート | バッククォート |
---|---|---|---|---|
usebackqなし | ファイル名 | 文字列 | コマンド | バッククォート記号を含むファイル名 |
usebackqあり | ファイル名 | ファイル名 | 文字列 | コマンド |
delims
- デリミタ(区切り文字)指定。delims=
とするとスペースをデリミタにしないtokens
- カラム(区切られた文字列の番号)の指定。usebackq
まず、空白を含むファイル名を指定する場合には、これをダブルクォートで囲む必要があるため、かならず“usebackq”を指定しなければならない。なぜなら、ファイル・セットは、空白で区切って複数のファイルを指定するようになっているからである。 基本的には、usebackqを必ず指定することにして、ファイル名は必要に応じてダブルクォート記号で囲み、コマンドならばバッククォート、文字列ならシングルクォート記号で囲むという使い分けが安全だろう。
- パスの取得時に引用符を除去
-
う~ん、3番目が確実かなと思いますがどうなんでしょ?
if defined dirpath set dirpath=%dirpath:"=%
for /f "delims=" %%I in ("%dirpath%") do set dirpath=%%~I
for /f "usebackq delims=" %%I in ('%dirpath%') do set dirpath=%%~I
/L オプション - 開始,増分,終了を指定
for /L %変数 in (開始,増分,終了) do コマンド
(10,10,100)
とすれば、10,20,30,...100
ワイルドカード(ファイル・ディレクトリの列挙)
※隠しファイルは列挙されない。
パスを指定しない場合はカレントディレクトリ(以下)が対象
- ファイル(ディレクトリ除く)
for %x in (*) do コマンド "%x"
%x をコマンドの引数にする場合は、ファイル名にスペースがある場合を考えて引用符を付けておく
- ディレクトリのみ
for /d %x in (*) do コマンド "%x"
- 再帰的に(完全パスで)
for /r %x in (*) do コマンド "%x"
- 隠しファイルもすべて表示するには
/f
+dir
コマンドで -
- ファイル名のみ再帰的に列挙する例
C:\test>for /f "delims=" %x in ('dir /a-d/b/s') do @echo %x C:\test\aaa.txt C:\test\dir1\44.txt
自作バッチ その2
- 2021.1.18 追記
-
もう古いので動かないかもしれません。いずれは削除しますので... アシカラズ。
※バッチファイルは Windows XP 用なのでご注意。Vista以降では確認していません。
Windows XP/2000 の基本設定の確認とか。Windows XP/2000 標準で使えるはずです...
- DHCPクライアントの設定 (Windows XP/2000)
-
- 必要コマンド - Windowsの標準コマンドのみ
TCP/IPの設定を「IPアドレスの自動取得」に設定。ってか、これは初期設定で有効な筈ですが、繋がらない時などに、LANアダプタや DHCP Client サービスの設定を再確認してみまひょ、という...
- DHCP_enable.bat(.txt)
- ネットワークドライブの接続・切断 (Windows XP/2000)
-
- 必要コマンド - Windowsの標準コマンドのみ
ログオン・ログオフの確認や実行。要するに、
net use
とnet view
コマンド...- Network_Drive.bat(.txt)
- 【簡易】セキュリティチェック (Windows XP/2000)
-
※ Windows 7 / Vista 確認。
- 必要コマンド - Windowsの標準コマンドのみ(※reg.exeもあった方が)
- ※サポート ツールの filever.exe がない場合は、WSH(VBScript)でファイルのバージョンを調べます
順に Autorun.inf、スタートアップフォルダ、アンインストールリストのチェック
- Check_Autorun.inf.bat (.txt)
- Check_StartUpDir.bat (.txt)
- Check_Uninstall.bat (.txt)
レジストリの自動起動関連とアンインストールリストの書き出し。スタートアップ フォルダと autorun.inf のチェック。
- Security_Check_NOVC.bat (.txt)
【追記】
プラグイン関連のバージョンチェックを追加。でも、旧バージョンのチェックが甘いかも... - 「送る」でディレクトリ・ファイル名などの操作
-
- 拙作めも :
- HDチェック
-
C: ドライブのチェックディスク
- Chkdsk_Run.bat (.txt)
- Chkdsk_Run.bat (.txt)
HD全ドライブのチェックディスク、ログ表示
- Chkdsk_Run-All.bat (.txt)
- Chkdsk_Run-All.bat (.txt)
HD全ドライブのデフラグ状態チェック、ログ表示
- Check_Defrag.bat (.txt)
- Check_Defrag.bat (.txt)
- 隠しファイル・拡張子表示設定切替。
-
regedit.exe は使わず inf ファイル (rundll32.exe) で設定変更。
- Explorer_ShowHiddenFiles.bat (.txt)
- Explorer_ShowHiddenFiles.bat (.txt)
- Autorun.inf の無効化をレジストリに設定(ウイルス対策)
-
※Windows XP 用です。(※ 7 でも一応確認してますけど...)
USBメモリ内の
autorun.inf
での自動実行によるウイルス感染防止対策として、上記ページの説明にある「autorun.inf
の無効化」レジストリを設定します(解除も可能)。※Windows XP用です。(※ 7 でも一応確認してますけど...)
- Reg_NoAutorun.bat (.txt)
- Windows PE 2.x, 3.x 【基本的】isoイメージの作成
-
※ Windows 7 / Vista 確認。64-bit もOK。Windows 8 では今のところ使えないです。
※ Windows 自動インストール キット (AIK)のインストールが必要
【2012.3.4】PATHの設定にミスがあったので修正しました。申し訳ございません...。
XP + PE 2.0, Vista SP2, 7 (Home 32-bit, Pro 64-bit) で確認しました。
ごく普通に...PE 基本イメージ作成
- WinPE_Make-ISO.bat (.txt)
- imagex.exe 追加
- BootSect.exe 追加 (2.x のみ、3.0は元々あり)
- bootfix.bin 削除
- すべてのファイルを表示するレジストリ修正
ファイル ShowAll.cmd 作成startnet.cmd
へ書き込み
Vista/7 のインストールDVDの
sources\boot.wim
から Windows RE(Windows 回復環境)のisoイメージ作成。7 のシステム修復ディスクのちょっとカスタマイズ版。- WinRE_Make-ISO.bat (.txt)
- imagex.exe 追加
- BootSect.exe 追加 (2.x のみ、3.0は元々あり)
- bootfix.bin 削除
- winpeshl.ini 作成
- すべてのファイルを表示するレジストリ修正ファイル
ShowAll.cmd
作成
※ インストールDVDがないメーカー製PCなどの場合は
C:\Recovery\winre.wim
や隠しパーティション内のwinre.wim
などをsources\boot.wim
としてコピーして実行します。- Windows RE 作成のテスト版
-
しっかり確認してないのであしからず。一応インストールDVDがない場合でも作れるように。
まず、
C:\Recovery
内のwinre.wim
を検索し見つかった場合は選択画面を出します。- WinRE_Make-ISO-RC.bat (.txt)
めも
- Windows付属のヘルプ
- コマンド プロンプト ウィンドウ
- bat/cmdファイルをテキストエディタで開く
- エクスプローラからコマンド プロンプトを開く
- 関連付け実行
- ファイル結合(と分割)
- エラー出ますた!
Windows付属のヘルプ
※ Windows XP の場合。
- chmファイル
%windir%\Help\ntcmds.chm
ヘルプとサポートから開く ( %systemroot%\pchealth\helpctr\binaries\HelpCtr.exe
)
- コマンド シェルの概要
HelpCtr.exe /url ms-its:ntcmds.chm::/ntcmds_shelloverview.htm
- コマンド ライン リファレンス
HelpCtr.exe /url ms-its:ntcmds.chm::/ntcmds_o.htm
- バッチ ファイルを使用する
HelpCtr.exe /url ms-its:ntcmds.chm::/batch.htm
- バッチ パラメータを使用する
HelpCtr.exe /url ms-its:ntcmds.chm::/percent.htm
- コマンド リダイレクト演算子を使用する
HelpCtr.exe /url ms-its:ntcmds.chm::/redirection.htm
コマンド プロンプト ウィンドウ
- 連載:Windows 2000コマンドライン徹底活用 第2回コマンド プロンプト入門(その2) -- 2.コマンドプロンプトの編集機能とコマンド履歴
- @IT:Windows TIPS -- Tips:コマンド・プロンプトで入力補完機能を使う方法
- コマンド プロンプト (Cmd.exe) の自動補完を有効にする方法(※Windows 2000 など)
Esc
- 入力をクリアF1
- 入力履歴 1文字ずつF2
- カーソルの前をコピーF3
- 直前に実行したコマンドF4
- カーソル以降削除F5
- 履歴(番号0から)F7
- 履歴(番号選択)
bat/cmdファイルをテキストエディタで開く
「右クリックメニューの編集」の指定を書き換え
- 【元】
%SystemRoot%\System32\NOTEPAD.EXE %1
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\batfile\shell\edit\command] @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\ 00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\ 54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,25,00,31,00,00,\ 00 [HKEY_CLASSES_ROOT\cmdfile\shell\edit\command] @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\ 00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\ 54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,25,00,31,00,00,\ 00
- 【EdTex】
"C:\Program Files\EdTex\edtex.exe" "%1"
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\batfile\shell\edit\command] @="\"C:\\Program Files\\EdTex\\edtex.exe\" \"%1\"" [HKEY_CLASSES_ROOT\cmdfile\shell\edit\command] @="\"C:\\Program Files\\EdTex\\edtex.exe\" \"%1\""
- 【秀丸】
"C:\Program Files\Hidemaru\Hidemaru.exe" "%1"
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\batfile\shell\edit\command] @="\"C:\\Program Files\\Hidemaru\\Hidemaru.exe\" \"%1\"" [HKEY_CLASSES_ROOT\cmdfile\shell\edit\command] @="\"C:\\Program Files\\Hidemaru\\Hidemaru.exe\" \"%1\""
エクスプローラからコマンド プロンプトを開く
フォルダを右クリックでそのフォルダをカレント・ディレクトリとしてコマンド プロンプトを開くregファイル。
- ※ Windows XP
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\cmd] @="コマンドプロンプト(&Z)" [HKEY_CLASSES_ROOT\Directory\shell\cmd\command] @="cmd.exe /k \"cd /d %L\"" [HKEY_CLASSES_ROOT\Drive\shell\cmd] @="コマンドプロンプト(&Z)" [HKEY_CLASSES_ROOT\Drive\shell\cmd\command] @="cmd.exe /k \"cd /d %L\""
- 元に戻す
Windows Registry Editor Version 5.00 [-HKEY_CLASSES_ROOT\Directory\shell\cmd] [-HKEY_CLASSES_ROOT\Drive\shell\cmd]
Windows 7 では...
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\cmd] "Extended"=- [HKEY_CLASSES_ROOT\Drive\shell\cmd] "Extended"=-
- 元に戻す
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\cmd] "Extended"="" [HKEY_CLASSES_ROOT\Drive\shell\cmd] "Extended"=""
pushd コマンドで移動してるので、ネットワーク上だとネットワークドライブが自動割り当てされますね。
Shift キー押しながらって方法もあるのですね。(※ 7 非対応ファイラーでは使えないかも。)
関連付け実行
エディタで編集中のbatファイルを直接実行。ツールバーのボタンなどに登録しておくと便利。
- 秀丸エディタ
-
- コマンド一覧→ファイル系→関連付けで開く
- プログラム実行 -
cmd /c "%f"
- EdTex(EdLeaf)
-
【外部ツール】の実行、または【ユーザーツール】に登録
- パス -
C:\WINDOWS\system32\cmd.exe
- パラメータ -
/c "$f"
- パス -
ファイル結合(と分割)
- ファイル結合
-
※
/b
はバイナリの場合(/A
ASCII テキスト ファイル)- 一つずつ
copy /b "test.000" "test.zip" copy /b "test.zip" + "test.001" "test.zip" copy /b "test.zip" + "test.002" "test.zip"
- 足し算
C:\>copy /b test.000 + test.001 + test.002 test.zip test.000 test.001 test.002 1 個のファイルをコピーしました。
- ワイルドカード
C:\>copy /b test.0* test.zip test.000 test.001 test.002 1 個のファイルをコピーしました。
- Linux
-
WIndows でも UnxUtils の split.exe, cat.exe でできます...
- 結合
$ cat test.zip.* > test.zip
- 分割
$ split --verbose -b 1423k test.zip test.zip. creating file `test.zip.aa' creating file `test.zip.ab' creating file `test.zip.ac'
エラー出ますた!
しょっちゅうやってるミス(汗)
- 空白を含むパスの処理・・・引数は引用符で囲む
- if文の = が一つしか...
- 引用符が片方だけ
- 変数の % が片方だけ
- for文の変数が %x (%%x)
- for文のdoなし
- 環境変数に引用符が...
- 環境変数とコマンド名が重複するとたまにおかしくなるなる
- GOTO の行き先が変
- ラベルがないー
- なんか全角文字が...
- PATHの設定忘れてた...
- 大文字小文字を区別
set path=.\texinst;%path%
の後の;%path%
忘れ
- バッチファイルの名前がコマンド名と同じ!
などなど...
私的Tips
一時ファイル・ディレクトリの作成
ファイル名重複の可能性や、エラー時などの削除忘れ、CDなどから実行する場合などを考えて、こんなかんじにしてます。
set temp_dir=%temp%\%random% mkdir %temp_dir%
一時ファイル名は簡単に "%temp_dir%\0"
とかでも指定可能。
- バッチ終了時、または中断時にはディレクトリごと削除
rd /s /q "%temp_dir%"
日付・時刻
- 現在の日付時刻を環境変数に設定
-
XP と 2000 でちょっと違い(2000では前に曜日が入る)があるので...
set now=%date%_%time% set now=%now: =0% set now=%now:~-20,2%%now:~-17,2%%now:~-14,5%%now:~-8,2%%now:~-5,2%
080909_223558
- 1:00から9:00は01:00にならずにスペースが入ってしまうので、スペースがあれば0に置換
- XPと2000で違いがあるので、末尾から数えて文字を抜き出し
またはこんなかんじでもいいのかな
set now=%date%_%time% set now=%now: =0% for /f "tokens=1-5 delims=/:." %%H in ("%now%") do set now=%%H%%I%%J%%K%%L set now=%now:~-13,13%
- 既存ファイルにファイル自身の更新日時を付けてリネーム
-
XP と 2000 でちょっと違いがあるので...
set file=boot.img <span class="red">REM # 更新日時取得</span> for %%I in (%file%) do set bt=%%~tI > bt=2008/09/09 07:11 <span class="red">REM # 日と時の間のスペース削除</span> set bt=%bt: =% > bt=2008/09/0907:11 <span class="red">REM # 文字列の後ろから抜き出し</span> set bt=%bt:~-13,2%%bt:~-10,2%%bt:~-7,2%_%bt:~-5,2%%bt:~-2,2%_%RANDOM% > bt=080909_0711_7062 <span class="red">REM # backnameを boot_日付_時間_乱数.img 設定</span> for %%I in (%file%) do set backname=%%~nI_%bt%%%~xI > backname=boot_080909_0711_7062.img ren %file% %backname%
- ファイルから更新日時を抜き出し
- 2000では末尾にスペースが含まれることがあるので、スペースを全削除
- 末尾から数えて文字を抜き出し
- 念の為に末尾に乱数をセット(秒がないので重複する可能性が)
- ファイル名_%bt%.拡張子 にする
- 元ファイルをリネーム
boot_080909_0711_7062.img
※上記ではスペースを含むパス、値に引用符がある場合に問題あり。
set /p file="C:\Documents and Settings\palm84\デスクトップ\boot.img" <span class="red">REM # 変数の値に引用符があれば除去</span> if defined file set file=%file:"=% <span class="red">REM # セットの変数を引用符で囲んで更新日時取得</span> for %%I in ("%file%") do set bt=%%~tI set bt=%bt: =% set bt=%bt:~-13,2%%bt:~-10,2%%bt:~-7,2%_%bt:~-5,2%%bt:~-2,2%_%RANDOM% for %%I in ("%file%") do set backname=%%~nI_%bt%%%~xI ren "%file%" "%backname%"
またはこんなかんじでもいいのかな
if defined file set file=%file:"=% for %%I in ("%file%") do set bt=%%~tI for /f "tokens=1-5 delims=/: " %%H in ("%bt%") do set bt=%%H%%I%%J_%%K%%L set bt=%bt: =% set bt=%bt:~-11,11% for %%I in ("%file%") do set backname=%%~nI_%bt%_%RANDOM%%%~xI ren "%file%" "%backname%"
ドライブの空き領域
dirコマンドの出力から
for /f "usebackq tokens=3,4" %%x in (`dir /a ^| findstr の空き領域`) do set aki=%%x %%y (set aki=xxx,xxx,xxx バイトの空き領域)
ディレクトリ関係
- ディレクトリ容量
-
dirコマンドの出力から
for /f "usebackq tokens=3-4" %%x in (`dir /a /s ^| findstr 個のファイル`) do set dir_size=%%x %%y (set dir_size=xx,xxx,xxx バイト)
事前に行数を出して
skip=%gyousu%
とかした方がスマートかもしれませんが、使えない場合もあったりしました。for /f "usebackq" %%x in (`dir /a /s ^| find /c "個のファイル"`) do set /a gyousu=%%x-1
- ファイルとディレクトリの判別
-
forコマンドでファイル属性を取得
mkdir test_dir set D_dir=test_dir for %x in ("%D_dir%") do set D_test=%~ax set D_test=d-------- if "%D_test:~0,1%"=="d" echo directory
ネットワークドライブではなくローカル上なら、
if exist test_dir\
やif exist test_dir\nul
でディレクトリの判断は可能なはず。 - ディレクトリが空かどうか
set test=test_dir set nakami=nasi for /f %%x in ('dir /a/b "%test%"') do set nakami=ari
ドライブルートの場合は、空っぽだと、
dir /a/b
がエラーになるので下記でも判別可能かと。set nakami=nasi dir /a /b A:\ >nul 2>nul && set nakami=ari
- 容量を調べて、0なら空ファイル・空ディレクトリの存在をチェックする例
set test=test_dir for /f "usebackq tokens=3" %%x in (`dir /a /s "%test%" ^| findstr 個のファイル`) do set test_size=%%x if not %test_size%==0 echo ディレクトリは内容あり if %test_size%==0 ( dir /a-d /b /s "%test%" >nul 2>nul && set empty_file=yes for /f "usebackq delims=" %%x in (`dir /ad /s /b "%test%"`) do set empty_dir=yes echo ディレクトリ容量は 0 です... if defined empty_file echo 空ファイルあり if defined empty_dir echo 空ディレクトリあり if not defined empty_file (if not defined empty_dir @echo 空っぽです))
ドライブレターを調べる
未割り当て、及び未使用のドライブレターを調べる場合など...
if exist
では、空の内蔵光学ドライブもnot existになってしまう- レジストリから割り当て済みドライブレターをチェック
- レジストリにはネットワークドライブは記録されない ので、
if exist
でもチェック - Reg.exe でレジストリの REG_BINARY 値を出力、findstrコマンドでCd-ROM, RemovableMediaの文字列をチェック
※ Windows 2000 で reg.exe を使うにはサポートツールのインストールが必要
- レジストリの割り当て済みドライブレターを列挙
regedit /e /a "mount_reg.txt" "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices" for %%x in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do findstr \\%%x: "mount_reg.txt" >nul && echo %%x:
reg.exe なら...
for %%x in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do reg query HKLM\SYSTEM\MountedDevices /v \DosDevices\%%x: >nul 2>nul && echo %%x:
- 空きドライブ文字を列挙
regedit /e /a "mount_reg.txt" "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices" for %%x in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do findstr \\%%x: mount_reg.txt >nul || if not exist %%x:\ echo %%x:
reg.exe なら...
for %%x in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do reg query HKLM\SYSTEM\MountedDevices /v \DosDevices\%%x: >nul 2>nul || if not exist %%x:\ echo %%x:
- CDドライブを列挙
reg query HKLM\SYSTEM\MountedDevices | findstr 4300640052006F006D00 | findstr DosDevices >temp.txt for %%x in (D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do findstr \\%%x: temp.txt >nul && echo %%x: - CD-ROM ドライブ
- リストファイルを作らない
for %%x in (D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do ( reg query HKLM\SYSTEM\MountedDevices | findstr 4300640052006F006D00 | findstr DosDevices\%%x: >nul && echo %%x: - CD-ROM ドライブ)
- リムーバブルメディア(フラッシュメモリなど)を列挙
reg query HKLM\SYSTEM\MountedDevices | findstr 520065006D006F007600610062006C0065004D0065006400690061 | findstr DosDevices >temp.txt for %%x in (D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do findstr \\%%x: temp.txt >nul && echo %%x: - RemovableMedia
- リストファイルを作らない
for %%x in (D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do ( reg query HKLM\SYSTEM\MountedDevices | findstr 520065006D006F007600610062006C0065004D0065006400690061 | findstr DosDevices\%%x: >nul && echo %%x: - RemovableMedia)
※ Windows 7 では...
for %%x in (D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do ( reg query HKLM\SYSTEM\MountedDevices | findstr 550053004200530054004f00520023004400690073006b00 | findstr DosDevices\%%x: >nul && echo %%x: - RemovableMedia)
ファイル数を数える
単純ですが...
for /f "tokens=1" %%x in ('dir /a ^| findstr 個のファイル') do set count=%%x
ワイルドカードで特定のファイルを数えるのもアリかと
for /f "tokens=1" %%x in ('dir /a /s *.bat ^| findstr 個のファイル') do set count=%%x
OS名・バージョン名
※ Server 2003, 2008 が区別できませんが...
- OS名
ver | find "Windows XP" >nul && set "osname=Microsoft Windows XP" ver | find "Windows 2000" >nul && set "osname=Microsoft Windows 2000" ver | find "Version 6.0" >nul && set "osname=Microsoft Windows Vista" ver | find "Version 6.1" >nul && set "osname=Microsoft Windows 7" echo %osname%
- Service Pack
regedit /s /e /a "reg_temp.txt" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" for /f "usebackq tokens=2 delims==" %%x in (`find /i "CSDVersion""=""Service Pack" "reg_temp.txt"`) do set spnumber=%%x if defined spnumber set spnumber=%spnumber:"=% echo %spnumber%
- XP Home EditionとProfessional
regedit /s /e "reg_xphome.txt" "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptions" find /i "ProductSuite""=hex(7):50,00,65" "reg_xphome.txt" >nul if ERRORLEVEL 1 ( set osname=Microsoft Windows XP Professional ) Else ( set osname=Microsoft Windows XP Home Edition ) echo %osname%
- Reg.exe で
-
- XP
>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName REG.EXE VERSION 3.0 KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion ProductName REG_SZ Microsoft Windows XP >reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CSDVersion ! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion CSDVersion REG_SZ Service Pack 3
>for /f "usebackq tokens=3 delims= " %%x in (`reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName`) do set "osname=%%x" >for /f "usebackq tokens=3 delims= " %%x in (`reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CSDVersion`) do set "spnumber=%%x" >if "%osname%"=="Microsoft Windows XP" ( >reg query HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions /v ProductSuite | findstr /i Personal >nul >if ERRORLEVEL 1 (set "osname=Microsoft Windows XP Professional") else ( set "osname=Microsoft Windows XP Home Edition")) >echo %osname% %spnumber%
- Vista
>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion ProductName REG_SZ Windows Vista (TM) Home Premium >reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CSDVersion HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion CSDVersion REG_SZ Service Pack 2
- 7
>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion ProductName REG_SZ Windows 7 Ultimate >reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CSDVersion エラー: 指定されたレジストリ キーまたは値が見つかりませんでした
ファイルを検索
ファイル名で検索して、フルパスで一覧表示。ワイルドカード【*
】使用可能。(※一覧表示はファイル名のみだがディレクトリ名も検索対象になる)
pushd C:\ dir /a-d/b/s regedit.exe C:\WINDOWS\regedit.exe C:\WINDOWS\system32\dllcache\regedit.exe C:\WinPE\mount\Windows\regedit.exe C:\winpe_x86\mount\Windows\regedit.exe
- 複数ファイル
- ※【
$
】で行末指定 - ※【
\\
】を付けないと、\ナントカreg.exeも対象になってしまう - ワイルドカード指定は【
.*
】(※ディレクトリ名も対象になってしまう)
- ※【
dir /a-d/b/s C:\ | findstr /i "\\reg.exe$ \\regedit.exe$"
forでの処理
ログに書き出す場合はこちらの方がいいかなぁ。上記ではログファイル名に検索ファイル名を付ける場合にアスタリスク【*】の置換ができないようなので...
- ファイル名のみ検索するには、
\\filename$
など正規表現を使う - ワイルドカード指定は、【
.*
】 - ログファイル名は、【
.*
】を【-】などに置換する
- ファイル名のみ指定した場合
- ディレクトリ名も対象、regedit.exeナントカも対象
for /f "usebackq delims=" %x in (`dir /a-d/b/s C:\ ^| findstr /i regedit.exe`) do @echo %x C:\WINDOWS\regedit.exe C:\WINDOWS\$NtServicePackUninstall$\regedit.exe C:\WINDOWS\Prefetch\REGEDIT.EXE-2AE3423E.pf C:\WINDOWS\ServicePackFiles\i386\regedit.exe C:\WINDOWS\system32\dllcache\regedit.exe||<
- ワイルドカード使用 -
\reg.exe
,\regナントカ.exe
を検索- \reg...\ナントカ.exeも対象になってしまう
- ※【
\\
】を付けないと、...reg\ナントカ.exeも対象になってしまう
for /f "usebackq delims=" %x in (`dir /a-d/b/s C:\ ^| findstr /i \\reg.*.exe`) do @echo %x C:\WINDOWS\regedit.exe C:\WINDOWS\system32\reg.exe C:\WINDOWS\system32\regedt32.exe C:\WINDOWS\system32\regini.exe C:\WINDOWS\system32\regsvr32.exe C:\WINDOWS\system32\regwiz.exe <以下略>
- 複数ファイル
- 引用符囲み、スペース区切り
for /f "usebackq delims=" %x in (`dir /a-d/b/s C:\ ^| findstr /i "\\reg.exe \\regini.exe"`) do @echo %x C:\Program Files\Windows Resource Kits\Tools\regini.exe C:\WINDOWS\$NtServicePackUninstall$\reg.exe C:\WINDOWS\ServicePackFiles\i386\reg.exe C:\WINDOWS\system32\reg.exe C:\WINDOWS\system32\regini.exe C:\WINDOWS\system32\dllcache\regini.exe <以下略>
- バッチファイル
-
ワイルドカード使用、複数ファイル指定を可能にして、対象をファイル名のみにするにはこんなかんじでいいのでせうか?
for /f "usebackq delims=" %%I in (`dir /a-d/b/s C:\ ^| findstr /i /e "%filename%"`) do ( echo %%~nxI | findstr /i /b "%filename%" >nul && echo %%I)
- ファイルを検索して、filever.exe でファイル情報を書き出すバッチファイル
- ワイルドカード指定は【
.*
】 - 複数ファイルはスペース区切りで指定
- ワイルドカード指定は【
@echo off title %~nx0 :ASK_FILE cls echo. set /p filename= ファイル名を入力 : echo. if defined filename set filename=%filename:"=% if "%filename%"=="" GOTO ASK_FILE set log=%filename:.*=-% set log=%log: =_% set log=Filever_%log%.txt > "%log%" echo ========================================================= >>"%log%" echo %date% %time% -- %filename% >>"%log%" echo ========================================================= for /f "usebackq delims=" %%I in (`dir /a-d/b/s C:\ ^| findstr /i /e "%filename%"`) do ( echo %%~nxI | findstr /i /b "%filename%" >nul if not ERRORLEVEL 1 ( >>"%log%" echo --------------------------------------------------------- >>"%log%" echo %%I >>"%log%" echo --------------------------------------------------------- >>"%log%" filever /v "%%I" >>"%log%" echo.) ) "%log%"
※ 下記は Windows 7 / Vista 非対応。
※ C,Dドライブから検索
- Find_and_FileVer.bat (.txt)
※filever.exe が使えない場合は、VBScriptで...
ProductVersion
は出ませんが。※ 次のは Windows 7 / Vista でも使えるはず。
- Find_and_FileVer_vbs.bat (.txt)
※ 全ドライブから検索
- Find_and_FileVer_vbs_All.bat (.txt)
- ファイルを検索して、filever.exe でファイル情報を書き出すバッチファイル
参考リンク
- 2ちゃんねる
-
かなり参考になりました。
ほなね