Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
以前、こんな投稿をしました。
この投稿の中では、PowerShell を使用して WEBサイトを MHT ファイルに保存する方法について書いたわけですが、ある方から質問をいただきました。
「ファイル名を日本語で入力するにはどうしたらよいか?」
なんとするどい質問でしょう。
そうなんです。vbs 使いには昔から有名な話ですが、sendkeys メソッドって日本語が正しく送れないのです。
例えば以下のようなスクリプトを実行したとします。これは、$url を mht 形式で保存するスクリプトなのですが、「Web ページの保存」ダイアログに対して Sendkeys メソッドでキーシーケンスを送っています。
$url = "https://www.microsoft.com/" $title = "abcdefg1234 マイクロソフト 安納 順一" $code = '$WShell = New-Object -comobject WScript.Shell; ' $code = $code + '$WShell.AppActivate(''Web ページの保存'', $true); ' $code = $code + '$WShell.SendKeys(''%T'') ; ' $code = $code + '$WShell.SendKeys(''{DOWN}'') ; ' $code = $code + '$WShell.SendKeys(''{UP}'') ; ' $code = $code + '$WShell.SendKeys(''{UP}'') ; ' $code = $code + '$WShell.SendKeys(''{DOWN}'') ; ' $code = $code + '$WShell.SendKeys(''{ENTER}'') ; ' $code = $code + '$WShell.SendKeys(''%N'') ; ' $code = $code + '$WShell.SendKeys('''+ $title + ''') ; ' $code = $code + '$WShell.SendKeys(''%S'')' $ie = New-Object -ComObject InternetExplorer.Application $ie.Navigate( $url ) while ($ie.ReadyState -ne 4) { Start-Sleep -Milliseconds 100} Start-Process powershell.exe -argument ('-version 2.0 -noprofile -windowstyle hidden -command "{0}"' -f $code) $ie.ExecWB(4,0,$null,[ref]$null) |
これを実行すると、ファイル名には以下のような文字列が入力されます。
そう、日本語が正しく入らないのですねぇ。
じゃ、どうするか。
検索エンジンを使っていただくといろんな回答が出てきますが、一番簡単なのは clip.exe でしょう。っていうか、書式がシンプルなので個人的に好きです。
clip.exe を使用すると、文字列をクリップボードにコピーすることができます。以下のように使います。
| echo "ほげほげ" | clip.exe |
これで「ほげほげ」という文字列がクリップボードにコピーされたので、^v を使ってペーストすればよいわけですね。なお「^」は Controlキーのシーケンスです。
スクリプトを修正すると以下の通りです。
$url = "https://www.microsoft.com/" $title = "abcdefg1234 マイクロソフト 安納 順一" $title | clip.exe $code = '$WShell = New-Object -comobject WScript.Shell; ' $code = $code + '$WShell.AppActivate(''Web ページの保存'', $true); ' $code = $code + '$WShell.SendKeys(''%T'') ; ' $code = $code + '$WShell.SendKeys(''{DOWN}'') ; ' $code = $code + '$WShell.SendKeys(''{UP}'') ; ' $code = $code + '$WShell.SendKeys(''{UP}'') ; ' $code = $code + '$WShell.SendKeys(''{DOWN}'') ; ' $code = $code + '$WShell.SendKeys(''{ENTER}'') ; ' $code = $code + '$WShell.SendKeys(''%N'') ; ' $code = $code + '$WShell.SendKeys(''^v'') ; ' $code = $code + '$WShell.SendKeys(''%S'')' $ie = New-Object -ComObject InternetExplorer.Application $ie.Navigate( $url ) while ($ie.ReadyState -ne 4) { Start-Sleep -Milliseconds 100} Start-Process powershell.exe -argument ('-version 2.0 -noprofile -windowstyle hidden -command "{0}"' -f $code) $ie.ExecWB(4,0,$null,[ref]$null) |
これで、めでたくファイル名に日本語が入りました。
このように、.NET Framework を駆使しなくても、1行追加するだけで実装できてしまいます。
clip.exe コマンド、便利ですねぇ。