frog.raindrop.jp.knowledge > Windows

August 31, 2017

フォルダの複数階層にあるファイルを、フォルダ名付きのファイル名にリネームして一つの階層にコピーするWindows Script

var fileSystem = new ActiveXObject('Scripting.FileSystemObject');
var OUTPUT_DIR = "Renamed";
var scriptFile = fileSystem.GetFile(WScript.ScriptFullName);
var targetFolder = scriptFile.ParentFolder;
var outputPath = fileSystem.BuildPath(targetFolder.Path, OUTPUT_DIR);

if(!fileSystem.FolderExists(outputPath)){
    fileSystem.CreateFolder(outputPath);
}

(function (folder, prefix){
    if(prefix.length)prefix += "_";
    for(var e = new Enumerator(folder.SubFolders); !e.atEnd(); e.moveNext()){
        var sf = e.item();
        arguments.callee(sf, prefix + sf.Name);
    }
    for(var e = new Enumerator(folder.Files); !e.atEnd(); e.moveNext()){
        var f = e.item();
        if(f.Path == scriptFile.Path)continue;
        f.Copy(fileSystem.BuildPath(outputPath, prefix + f.Name));
    }
})(targetFolder, "");


WScript.echo(outputPath + "にファイルをコピーしました。");

July 18, 2012

Windows Media エンコード スクリプトで一括エンコード

自分用のメモです。すみません。
Windows Media エンコーダに付属するスクリプトを使って、フォルダ内の MP4 ファイルを WMV に一括変換するバッチファイルの例です。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET VBS="C:\Program Files\Windows Media Components\Encoder\WMCmd.vbs"

FOR %%F IN (*.MP4) DO (
    SET FILE=%%F
    cscript.exe %VBS% -input %%F -output "!FILE:~0,-3!wmv" -v_mode 2 -v_quality 100 -a_mode 2 -a_setting Q100_44_2_16
)

March 22, 2008

「16 ビット MS-DOS サブシステム」メッセージ

古いソフトウェアのインストールを行う際、インストーラを起動すると次のようなメッセージが表示される場合があります。

タイトル:「16 ビット MS-DOS サブシステム」
メッセージ:「実行またはインストールしようとしているプログラムへのパス
C:\WINNT\system32\autoexec.nt システム ファイルは MS-DOS および Microsoft Windows アプリケーションを実行するのに適していません。アプリケーションを終了するには、[閉じる] を選んでください。」

これは、Windows Xp SP2 の環境で発生する事が多いようです。ファイル名 autoexec.nt は、「Config.nt」などの事もあるようですが、私が遭遇したのはすべて autoexec.ntでした。

InstallShield の古いバージョンで作成されたインストーラでは、付属する SETUP.EXE が 16bit アプリケーションのものがあるのですが、このメッセージが表示される環境では、あらゆる 16bit アプリケーションが実行できません。

解決策としては、以下のいずれかになります。

  • 環境を修復する
  • 32bit 版の SETUP.EXE を使用する

環境を修復する方法は、一番簡単なのは C:\windows\repair より、Autoconfig.nt を %systemroot%\system32 へコピーします。詳しくは、Microsoft のサポート技術情報 MS-DOS または 16 ビット Windows ベースのプログラムをインストールまたは起動した場合のエラー メッセージ を参照の事。

32bit 版の SETUP.EXE を使用する方法ですが、InstallShield で作成されたインストーラで、Windows Installer を使用しないバージョンのものは、SETUP.EXE は共通のアプリケーションです。ですので、何か他のソフトのインストーラで、32bit 版の SETUP.EXE を使用している物がみつかれば、それに置き換えてやる事で実行可能になります。インストーラが CD-ROM 等に収録されている場合は、SETUP.EXE を含むディレクトリごとごっそりハードディスクにコピーして、SETUP.EXE のみ 32bit 版のものに置き換えて実行すれば OK です。

January 17, 2008

言語バーに表示される IME の名称

Windows Vista では、言語バーにキーボード レイアウト名として表示されるIMEの名称はレジストリの以下のエントリより取得しているらしい。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\キーボードレイアウトごとの識別番号(4バイトHEX表記)\Layout Text
この名称は「テキストサービスと入力言語」画面の「インストールされているサービス」のリストで表示されるものと同じものだが、Windows Xp ではこのエントリを変更しても言語バーの表示は追従しない。どこから取得しているんだろう。

December 18, 2007

Windows Update エラー番号:0x8024022

Windows XP Professional SP2 で、シャットダウンのたびに "重要な更新をインストールして電源を切る場合は・・・" が表示されていた。どうやら、毎回失敗していると考えられる。

手動で Microsoft Update にアクセスしてみたが、案の定失敗した。エラー番号:0x80244022。調べてみたところ、SUS_E_PT_HTTP_STATUS_SERVICE_UNAVAIL、Http status 503 - temporarily overloaded とのこと。結局、

>ipconfig /flushdns
で解決した。

このエラー番号は載ってなかったけど、Windows Update のエラー対処情報等は以下のあたりに。

http://support.microsoft.com/ph/6527

March 6, 2006

Windows Xp Professional で、NTP サーバを構成する

Windows Xp は、信頼できる時刻ソースと定期的に同期を行うと、同時に、自動的に NTP サーバとして動作させることができます。

最後に行った時刻同期が失敗している、または、最後に行った時刻同期より、一定以上経過している場合、クライアントからの時刻同期の要求は失敗します。

とにかく2台のマシンの時刻を同期する必要があり、一方が WinXp の場合、それをNTP サーバとして使うことができます。

続きを読む...

Windows 2000 Professional で、SNTP クライアントを構成する

Windows 2000 Professional は、SNTP クライアントの機能があります。 ただし、どうやらデフォルトでは起動していないようです。

続きを読む...

December 8, 2004

ログオン画面や、セキュリティダイアログを取りこむ

winFAQ より。

手順書などを作成する場合に、ログオン画面や、セキュリティダイアログ (Ctrl Alt Del キーを押した画面) をキャプチャーしたい場合があります。 2 台の Windows があれば、次の手順で簡単に取りこむことができます。

Windows 2000 PC でリモートデスクトップ共有を有効にします。
  1. Windows 2000 にログオンします。
  2. 画面の色数を 256 色に設定します。(このほうがキレイにとれます)
  3. [スタート]-[プログラム]-[アクセサリ]-[通信] から NetMeeting を起動します。
  4. [ツール]-[リモートデスクトップ共有] をクリックします。
  5. ウィザードが起動するので、「次へ」「次へ」をクリックします。
  6. スクリーンセーバーパスワードは設定せず、「次へ」をクリックします。
  7. 「完了」をクリックします。
もう一台から接続して画面を取りこみます。
  1. もう一台の Windows にログオンします。
  2. NetMeerting を起動します。
  3. 通話ボタン (電話のアイコン) をクリックし、通話先に Windows 2000 PC の IP アドレスを記入し、「この通話をセキュリティで保護する」にチェックを入れて「通話」ボタンをクリックします。
  4. [制御]-[Ctrl Alt Del の送信] をクリックするとセキュリティダイアログが表示されます。ここで「ログオフ」すると、Windows 2000 のログオン画面が表示されます。NetMeeting で表示された画面は、Print Screen キーで取りこむことができます。
PC が 1 台しかない場合、VMware などの使用を検討するといいでしょう。

October 6, 2004

続:連番の拡張子にリネームする

連番の拡張子にリネームするJScript のバッチファイル解です。ポイントは、当たり前といえば当たり前なんですが、FOR 文の内容はすべて遅延展開でないとうまく行かないという点ですね。別にJScript版で充分という気がします。

続きを読む...

March 25, 2004

プリンタ追加バッチ

大量のプリンタのインストールをバッチファイルで行うことはできないかと調べていたら、189105 - ユーザーによる操作なしで Windows にプリンタを追加する方法というのを発見した。これを使えば、プリンタのインストールをこんな感じでバッチファイルに記述することができる。

rundll32 printui.dll,PrintUIEntry /if /b "プリンタに付ける名前"  /f "INFファイル名" /q /r "ポート(LPT1:とか)" /m "プリンタのモデル名"

詳しい使い方は、 rundll32 printui.dll,PrintUIEntry /? で、ヘルプを見ることができる。以下はその内容。

続きを読む...

February 20, 2004

HOSTSの変更はいつ反映されるの?

というわけで、こんなテストをしてみた。

続きを読む...

February 13, 2004

Windows Xp で、Ctrl + Alt + Del で、「Windowsのセキュリティ」画面が表示される条件

Windows 2000の頃に、Ctrl + Alt + Delを押下すると、「Windowsのセキュリティ」ってダイアログがでて、そこからシャットダウンしたり、ログオフしたりできて便利だったのに、Windows XPではタスクマネージャが出るなーって思ってました。タスクマネージャは別にCtrl + Shift + Escで出せるからどうでもいいのにーって。でも、使ってるうちにいつの間にか、Windows XpでもCtrl + Alt + DelでWindowsのセキュリティ画面が出るようになって、何でかなって思ってました。どうやら、ユーザの簡易切り替えと関係があるみたい。簡易切り替えを使用すると、タスクマネージャになるみたいです。なんか変なのー。

September 11, 2003

起動時にNumLockをONに

Windows 2000/Xpで、NumLockがONの状態で起動する方法。
毎回調べるけど、ぜんぜん覚えられないので。


キー:HKEY_USERS\.DEFAULT\Control Panel\Keyboard
文字列値:InitialKeyboardIndicators
0ならOFF
2ならON

August 28, 2003

ネットワーク上に存在するIPアドレスを確認する

Windows2000で、192.168.1.0/24のネットワークで、
実際に使用されているIPを得るにはこんな感じで。

C:\>FOR /L %I IN (1, 1, 254) DO ping -n 1 -w 50 192.168.1.%I

C:\>ping -n 1 -w 50 192.168.1.1

Pinging 192.168.1.1 with 32 bytes of data:

Reply from 192.168.1.1: bytes=32 time<10ms TTL=64

Ping statistics for 192.168.1.1:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  0ms, Average =  0ms

C:\>ping -n 1 -w 50 192.168.1.2
.
.
(192.168.1.1~192.168.1.254にPingを1回ずつ行います)
C:\>ARP -a >Arp.lst

C:\>

FORコマンドでPingをループさせ、
最後にARPでテキストファイルに吐き出すのがポイントです

続きを読む...