WebPenguin のすべての投稿

キーボードレイアウトの選択と表示されて起動できない

Windows起動時に、キーボードレイアウトの選択と表示されて、選択するとメンテンナンス画面になり、修復操作でしても、修復できませんでしたとなり、どうにもならなくなった

原因として考えられることは、起動用USB作成等で、いろいろ実験したためと思われる
クローンソフトなどでコピーした時も起こりうる

後で振り返ると、ブートマネージャーが書き換えられ、OSデバイスが見つからなくて、修復ツールのパーティションが起動していたので、OSのデバイス位置を修正してやればよかった

以下に、回復させて手順をメモしておく

1,ボードレイアウトの選択後、コマンドプロンプトを起動を選択

2,bootrec /scanos でOSのドライブを調べる

3,検出されたドライブ名がCになっていたらOKだが、違っていたら、以下のコマンドで戻す

Eドライブが検出されたとき、dir e: などで目的のドライブかを確認して、以下のコマンドで修正 /l はエル

bcdboot E:¥windows /l ja-jp /s c:

c:  ENTERでドライブ切替
c:>bootrec /rebuildbcd で再構築
※マルチブートで複数ある時は、ここではEなので、EをY選択して追加する

これで、起動可能に回復した

FastCopyとBatファイルのログ

FastCopyをバッチファイルで実行するときにログ指定をした時、文字化けで記録されることがある

BatファイルがShift-JISでFastCopyがUTF-8のためで、FastCopyの旧バージョンでは、ログの文字コード指定ができたが、最近のバージョンでは、できない

そこで、コマンドプロンプトの文字コードを変更する必要がある

chcp 65001を記述するとUTF-8の文字コードでコマンドプロンプトが動作する

chcp 65001

date /T >> “C:\bat\backup.log”
time /T >> “C:\bat\backup.log”
echo “バックアップを開始しました” >> “C:\bat\backup.log”

“C:\Program Files\FastCopy\FastCopy.exe” /cmd=sync /acl=FALSE /exclude=”$Recycle.Bin\;$WinREAgent\;System Volume Information\;” /auto_close /force_close /error_stop=FALSE /skip_empty_dir=FALSE /log /logfile=”C:\bat\backup.log” “E:\” /to=”H:\”

date /T >> “C:\bat\backup.log”
time /T >> “C:\bat\backup.log”

echo “**************** backupバックアップが完了しました *******************” >> “C:\bat\backup.log”

複数のCSVファイルを結合して1つのファイルにする

batファイルでコピー
例 カレントディレクトリ内のCSVファイルを結合データ.csvファイルへまとめる

@echo off
setlocal
rem echo %~dp0
set current_dir=%~dp0
copy /B %current_dir%\*.csv %current_dir%結合データ.csv

※ /B オプション指定でバイナリファイル扱いさせないと、最後に・の行が出来てしまうので注意

VBS Wshでファイル選択を実行ファイルパスにする

エクセルファイルを選択して開くダイアログボックスを実行するvbsファイルのフォルダをデフォルトにする
注意 以下をコピーする時は、 ’と〝 ” を半角の ’ と ”に置き換える必要がある

Dim xlsApp
Dim DPath
Dim FilePath
Dim objShell

‘カレントディレクトリを取得
Set objShell = CreateObject(“WScript.Shell”)
currentDir = objShell.CurrentDirectory

‘.DefaultFilePathにカレントディレクトリをセット
Set xlsApp = CreateObject(“Excel.Application”)
DPath= xlsApp.DefaultFilePath
With xlsApp
.DefaultFilePath = currentDir
.Quit
End With
Set xlsApp = Nothing ‘一度開放して設定を反映
Set xlsApp = CreateObject(“Excel.Application”)

‘カレントディレクトリを初期フォルダでダイアログが開く
FilePath= xlsApp.GetOpenFilename(“Excel File,*.xlsx;*.xls,All,*.*”,1,”ファイルを選択して下さい”,”開く”,false)
If FilePath <> False Then
‘Wscript.Echo FilePath ‘確認時に使用
Else
WScript.Quit ‘キャンセルしてファイルを選択しなかった時
End If

‘FilePathを使って以下に実際の処理を記述

UWSCでリストを読み込んで処理させる

例 エクセルで抽出して2列のデータを読み込む
エクセルで2列を選択して、テキストエディタへ貼り付けるとTAB区切りとなる

リストファイル読み込み例
list_file = “c:\work\list.txt”

ID = FOPEN(list_file,F_READ OR F_TAB) // F_TAB指定しない時はカンマ区切り

n_end = FGET(ID,F_LINECOUNT) // 最終行を取得
n = 0
// **** ループ ****
WHILE(n < n_end) // 最終行まで繰り返す
n = n + 1
str = FGET(ID,n,1) // 1列目読み込み
SENDSTR(0,str) // クリップボードへセット

// 位置を選択した後、貼り付ける
// 貼り付け位置は記録機能で調べる
BTN(LEFT,CLICK,**,**,**)
SCKEY(0,VK_CTRL,V)

str = FGET(ID,n,2) // 2列目読み込み
SENDSTR(0,str) // クリップボードへセット

// 位置を選択した後、貼り付ける
// 貼り付け位置は記録機能で調べる
BTN(LEFT,CLICK,**,**,**)
SCKEY(0,VK_CTRL,V)

// 処理記述

WEND // WHILEループ

UWSCでフォームへデータを記入

SENDSTRでテキストを記入できるフォームと出来ない場合があり、KBDでタイプさせる手もあるが、クリップボードを使うと汎用性が高い


str = “記入したい文字”
// IDを0指定にするとクリップボードへセット
SENDSTR(0,str)

記録で貼り付けたい位置を選択して調べる

BTN(LEFT,CLICK,441,484,300)

位置を選択後、貼り付け
SCKEY(0,VK_CTRL,V) // ペースト

Tablacus Explorerのツールバーへ機能追加

画面をスクロールさせるのに、CTRL+ENDやCTRL+HOMEを使っているが、ツールボタンに追加して、クリックするだけで移動できるようにする
ツールバーアドオンに追加で実行を設定する

タイプをVBScriptでオプションに以下を記述
Set WshShell = CreateObject(“WScript.Shell”)
WshShell.SendKeys (“^{END}”)

Set WshShell = CreateObject(“WScript.Shell”)
WshShell.SendKeys (“^{HOME}”)

または、タイプを実行で

Tablacus ExplorerフォルダへVBSファイルの格納してこれを実行

VBSのキー・ストローク送信を実行する
※下記のコードコピーする時は”を半角に変更すること
<end.vbs>
Set objShell = WScript.CreateObject(“WScript.Shell”)
objShell.SendKeys “^{END}”

<home.vbs>
Set objShell = WScript.CreateObject(“WScript.Shell”)
objShell.SendKeys “^{HOME}”

ファイル名の空白を置き替える

注意 このブログは、’と“”が全角に置き換わるので、vbsファイルへコピー後に、半角のシングルクォーテーションと半角のダブルクォーテーションに置き換えること
※ “と”をダブルクォーテーションに置き換える

Option Explicit
‘************************
‘カレントディレクトリのファイル名の半角をアンダーバーに置き換える

Dim after

Dim objFolder
Dim objFile
Dim objFileSys
Dim strExtension
Dim myPath
Dim objShell

Set objShell = CreateObject( “WScript.Shell” )
myPath = objShell.CurrentDirectory ‘myPathをカレントディレクトリ指定 ここを変更すると任意のディレクトリにも出来る
Set objShell = Nothing

‘ファイルシステムを扱うオブジェクトを作成
Set objFile = CreateObject(“Scripting.FileSystemObject”)
Set objFileSys = CreateObject(“Scripting.FileSystemObject”) ‘拡張子取得用

‘フォルダのオブジェクトを取得
Set objFolder = objFile.GetFolder(myPath)

‘FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
For Each objFile In objFolder.Files

‘ファイルの拡張子を取得
strExtension = objFileSys.GetExtensionName(objFile.Name)

If strExtension <> “” Then ‘<>””は未指定、=”pptx”等で拡張子を指定できる

If InStr(objFile.Name,” “) Then ‘空白を含む場合のみ処理
after = Replace(objFile.Name,” “,”_”)
‘ファイル名変更
objFile.Name = after
End If

If InStr(objFile.Name,” ”) Then ‘全角の空白も処理にしている 不要ならコメントアウト
after = Replace(objFile.Name,” ”,”_”)
‘ファイル名変更
objFile.Name = after
End If

End If

Next

Set objFile = Nothing
Set objFileSys = Nothing
Set objFolder = Nothing

Wscript.Echo “完了しました” ‘不要ならコメントアウト

パワーポイントから画像を抽出

スクリプトを実行したフォルダ内のPowerPointファイルから画像を抽出
色の再現度がJPGよりPNGの方が良かったので設定(変更も可能)
読み込みフォルダも出力フォルダもカレントディレクトリにしているが、固定で指定することも可能

ファイル名の半角空白があると誤動作して、プロセスにPowerPointが残り、手動で終了させないといけなくなるので、半角の空白はアンダーバーで置き換える処理を先にする

注意 このブログは、’と“”が全角に置き換わるので、vbsファイルへコピー後に、半角のシングルクォーテーションと半角のダブルクォーテーションに置き換えること
※ “と”をダブルクォーテーションに置き換える

pptxファイルから画像ファイルを抽出.vbs のサンプルコード

Option Explicit
‘************************

‘ myPathで指定したフォルダ内ファイルに含まれる半角空白を_に置き換える

Dim after

Dim objFolder
Dim objFile
Dim objFileSys
Dim strExtension
Dim myPath
Dim objShell

Set objShell = CreateObject( “WScript.Shell” )
myPath = objShell.CurrentDirectory
Set objShell = Nothing

‘ファイルシステムを扱うオブジェクトを作成
Set objFile = CreateObject(“Scripting.FileSystemObject”)
Set objFileSys = CreateObject(“Scripting.FileSystemObject”) ‘拡張子取得用

‘フォルダのオブジェクトを取得
Set objFolder = objFile.GetFolder(myPath)

‘FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
For Each objFile In objFolder.Files

‘ファイルの拡張子を取得
strExtension = objFileSys.GetExtensionName(objFile.Name)

If strExtension = “pptx” Then

If InStr(objFile.Name,” “) Then ‘空白を含む場合のみ処理

after = Replace(objFile.Name,” “,”_”)

‘ファイル名変更
objFile.Name = after
End If

End If

Next

Set objFile = Nothing
Set objFileSys = Nothing

‘***********************必要な設定をppSaveAsXXXで指定
Const ppSaveAsBMP = 19
Const ppSaveAsPNG = 18
Const ppSaveAsJPG = 17
Const ppSaveAsGIF = 16
Const ppSaveAsHTML = 12
Const ppSaveAsDefault = 11
Const ppSaveAsPDF = 32
Const ppSaveAsPowerPoint3 = 4
Const ppSaveAsPowerPoint4 = 3
Const ppSaveAsPowerPoint7 = 2

Dim fname, ppt

‘ File System Object
Dim objFso
Set objFso = CreateObject(“Scripting.FileSystemObject”)

‘ Wsh Shell
Dim objWshShell
Set objWshShell = WScript.CreateObject(“WScript.Shell”)

Dim strPath
Dim outPath
Dim imgName

Set objShell = CreateObject( “WScript.Shell” )
strPath = objShell.CurrentDirectory
Set objShell = Nothing

Dim obj ‘As Object

For Each obj In objFso.getfolder(strPath).Files

If Right(obj.Name,5) = “.pptx” and Left(obj.Name,1) <> “~” Then ‘~$の一時ファイルが残っていてエラーとなることあったので対策
fname = strPath & “\” & obj.Name

Set ppt = GetObject(fname)
ppt.SaveAs ppt.FullName, ppSaveAsPNG ‘ppt.FullNameでファイル名のフォルダを作って、格納 ppt.FullNameの部分をパスを記載して出力先を固定にすることも可能 事前にフォルダの作成が不要(作成される)
ppt.Close

End If
Next

Set objFso = Nothing

‘スクリプトエラーでパワーポイントのプロセスが残った時の対策

objWshShell.Run “taskkill /im POWERPNT.EXE /F /T”, 7, False ‘ウィンドウを最小化ウィンドウとして表示アクティブなウィンドウは切り替わらない コマンドの終了を待たない

Set objWshShell = Nothing

Wscript.Echo “完了しました”

ランサムウェアらしきものからの回復

知り合いから回復依頼
マルウェアらしきものに感染し、050*****に電話させられ、費用を要求され、よく分からずリモート設定までしてしまったとの事

スタートメニュー等々が開かなくなっており、再起動したらPINコードが壊れているとのことでログインすら出来ない状態

対処
BIOSでUSB起動にして、WindowsをUSB起動して、隠し技でコマンドプロンプトを埋め込む
Shft+F10 Utilman.exe cmd.exe
通常起動、コマンドプロンプトでローカルアカウントを作成し、管理者グループへ入れて、ログイン
net user admintemp /add PassworsXX
net localgroup administrators admintemp /add

操作が効かないので、コマンドで設定を起動してみるが、エラー
復元でもポイントが見つからないとのメッセージ
アカウント管理もエラー、PCリセットもNG
一旦、サインアウトすると、再度、ログイン出来なくなり、再度、ローカルアカウントを作成する必要あり。
コマンドでrstrui.exe も復元ポイント見つからない
コマンドで、systemreset -factoryreset でPCリセットもエラーで実行不可

諦めて、再度、USBでWindows10起動
メーカのリカバリメディアも何もないとの事で、最悪、初期化してWindows10をインストールしようと進める
直ぐにインストール画面の下の回復をやってみると、Windows11を復元が選べる
試しにやってみると、直近の自動保存イメージからリカバリで出来た

結果的にPCリセットしなくても良かったので、結果オーライ
タスクマネージャーで不審なタスクが無いか確認
スタートアップとサービスもチェック
ブラウザの履歴なども念のため削除で一応、問題なし