DOSバッチについてアドバイスをお願い致します。複数のコマンドプロンプトを開いて処理を行うため手で開いてウィンドウ位置を調整していたのですが、下記のコードは1test~5testフォルダ内にあるtest.batを100ピクセルづつ右にずらしながら開いていく記述になります。バッチはエラーなく動いてくれるのですが、0の次が200ピクセルの位置からスタートしてしまう現象が出ています。その後は300,400と続いてくれるのですがどこに見落としがありますでしょうか?また一番最後の行にpauseを入れて順番に実行していくと問題なく動きます。なのでtimeoutを入れてみましたが、ダメでした、、、タイミング的な問題ではなさそうに感じます。@echo offclscd /d \u0026quot;%~dp0\u0026quot;Set /a WinPosi=0For /L %%a IN (1,1,5) DO (CALL :MAIN %%a)REG ADD \u0026quot;HKCU\\Console\\%%SystemRoot%%_System32_CMD.exe\u0026quot; /v WindowPosition /t REG_DWORD /d 0 /f:MAINSet FolderNum=%1start %FolderNum%test\\test.batSet /a WinPosi=%WinPosi%+100

Word

1件の回答

回答を書く

1165623

2026-01-10 14:35

+ フォロー

このバッチをベースにしても想定通り動きません。



MAINでtest.batを5回実行した後にレジストリの値を変更しているだけです。



(WinPosiはどこにも呼ばれておらず、システム予約変数とかでもないようなので、ただ足し算しているだけになっています。200以降は動いているとのことですが、おそらくWindows側の仕組みでたまたま自動的にずれて表示されただけと推察します。)



コマンドプロンプトではGUIベースの操作は基本的に無理なので、powershellで以下を実行してください。

デフォルトで500*500のウインドウを100ピクセルずつ右にずらします。

ずらす幅($X)は引数で指定可能。

※sleep時間は調整可能ですが、短くしすぎると誤作動する場合があります。



--------------------------------------------

param(

[int]$X = 100

)



[int]$Y = 100

[int]$BatWidth=500;

[int]$BatHeight=500;



Add-Type -Namespace PInvoke -Name Win32 -MemberDefinition @\u0026quot;

[System.Runtime.InteropServices.DllImport(\u0026quot;kernel32.dll\u0026quot;)]

public static extern System.IntPtr GetConsoleWindow();



[System.Runtime.InteropServices.DllImport(\u0026quot;user32.dll\u0026quot;)]

public static extern bool MoveWindow(

System.IntPtr hWnd,

int X,

int Y,

int nWidth,

int nHeight,

bool bRepaint

);

\u0026quot;@



for ($i=1;$i -lt 6; $i++){



$process = Start-Process cmd.exe \u0026quot;/k C:\\Users\\Administrator.WINADC\\Desktop\\chie\\${i}test\\test.bat\u0026quot; -PassThru

sleep 1

$hWnd = $process.MainWindowHandle

[PInvoke.Win32]::MoveWindow($hWnd, ($i*$X), $Y, $BatWidth, $BatHeight, $true)



}



--------------------------------------------

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有