バット スクリプトからブート パーティションのドライブ名を取得する必要があります。
次のようにブートパーティション番号を取得しますreagentc.exe /info
。
Windows RE location: \\?\GLOBALROOT\device\harddisk0\partition1\Recovery\WindowsRE
しかし、ドライブ名が必要です。どうやってそれをバットから取得できますか?
バット スクリプトからブート パーティションのドライブ名を取得する必要があります。
次のようにブートパーティション番号を取得しますreagentc.exe /info
。
Windows RE location: \\?\GLOBALROOT\device\harddisk0\partition1\Recovery\WindowsRE
しかし、ドライブ名が必要です。どうやってそれをバットから取得できますか?
これが私の解決策です。
まずdrives.bat
、次の内容で を作成します (論理ドライブとそのディスク パーティションが一覧表示されます)。
@if (@X)==(@Y) @end /* JSCRIPT COMMENT **
@echo off
cscript //E:JScript //nologo "%~f0"
exit /b
// Sources of wisdom:
//http://social.msdn.microsoft.com/Forums/vstudio/en-US/659030c8-bcf5-4542-bbc6-eaf9679e090a/cannot-create-object-wmi-in-javascript
//http://blogs.technet.com/b/heyscriptingguy/archive/2005/05/23/how-can-i-correlate-logical-drives-and-physical-disks.aspx
//http://stackoverflow.com/a/1144788/388389
************** end of JSCRIPT COMMENT **/
String.prototype.replaceAll = function (find, replace) {
var str = this;
return str.replace(new RegExp(find.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'g'), replace);
};
var winmgmts= GetObject("winmgmts:\\\\.\\root\\cimv2")
var drives = winmgmts.ExecQuery( "SELECT * FROM Win32_DiskDrive", null, 48 );
//WScript.Echo(drives);
var drvs = new Enumerator(drives);
for (;!drvs.atEnd();drvs.moveNext()) {
var drive=drvs.item();
WScript.Echo( "Physical Disk: " + drive.Caption + " -- " + drive.DeviceID );
var deviceID = drive.DeviceID.replaceAll( "\\" ,"\\\\");
var colPartitions = winmgmts.ExecQuery( "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=\"" +
deviceID + "\"} WHERE AssocClass = Win32_DiskDriveToDiskPartition" , null, 48 );
var colParts = new Enumerator(colPartitions);
for (;!colParts.atEnd();colParts.moveNext()) {
var partition=colParts.item();
//WScript.Echo( "Disk Partition: " + partition.DeviceID );
var colLogicalDisks = winmgmts.ExecQuery( "ASSOCIATORS OF {Win32_DiskPartition.DeviceID=\"" +
partition.DeviceID + "\"} WHERE AssocClass = Win32_LogicalDiskToPartition" , null, 48);
var colLD = new Enumerator(colLogicalDisks);
if (typeof colLD.item() != "undefined") {
for (;!colLD.atEnd();colLD.moveNext()) {
var logicalDisk=colLD.item();
WScript.Echo( " Logical Disk: " + logicalDisk.DeviceID + " Disk Partition: harddisk" + partition.DeviceID.split("#")[1].split(",")[0] + "\\partition" + partition.DeviceID.split("#")[2] );
}
} else {
WScript.Echo( " Disk Partition: harddisk" + partition.DeviceID.split("#")[1].split(",")[0] + "\\partition" + partition.DeviceID.split("#")[2] );
}
}
}
次に、同じre_d.bat
ディレクトリに次の内容の を作成します (好きなように呼び出すことができます)。
@echo off
for /f "tokens=5,6 delims=\" %%a in ('reagentc.exe /info 2^>nul ^|find /i " Windows RE location:"') do (
set "re_loc=%%a\%%b"
)
for /f "tokens=2 delims=:" %%a in ('drives.bat ^|find /i "%re_loc%"') do (
set "re_dsk=%%a"
)
echo RE LOCATION : %re_loc%
echo RE LOGICAL DISK : %re_dsk%:
そして、2番目の出力を見て.bat
ください。