A way to run BAT from a script?

Post » Thu Jun 21, 2012 1:19 am

Is this not possible yet?

As it is now players have to go to the console and type BAT MYFILE to run my configuration file.

I would like to do this automatically from a script.
User avatar
lillian luna
 
Posts: 3432
Joined: Thu Aug 31, 2006 9:43 pm

Post » Thu Jun 21, 2012 7:15 am

Say you have a Man.txt batch file:

Copypasta the below functions...

Spoiler
Function Console(String asCommand = "", Int aiCharIndex = 0, Int aiStringLength = 0)	Input.TapKey(41) ; '~'	aiStringLength = StringUtil.GetLength(asCommand)	While (aiCharIndex < aiStringLength)		Input.TapKey(GetDXScanCode(StringUtil.GetNthChar(asCommand, aiCharIndex)))		aiCharIndex += 1	EndWhile	Input.TapKey(28) ; 'Enter'	Input.TapKey(41) ; '~'EndFunctionInt Function GetDXScanCode(String asCharacter = "")	If StringUtil.IsLetter(asCharacter)		If asCharacter == "Q"			Return 16		ElseIf asCharacter == "W"			Return 17		ElseIf asCharacter == "E"			Return 18		ElseIf asCharacter == "R"			Return 19		ElseIf asCharacter == "T"			Return 20		ElseIf asCharacter == "Y"			Return 21		ElseIf asCharacter == "U"			Return 22		ElseIf asCharacter == "I"			Return 23		ElseIf asCharacter == "O"			Return 24		ElseIf asCharacter == "P"			Return 25		ElseIf asCharacter == "A"			Return 30		ElseIf asCharacter == "S"			Return 31		ElseIf asCharacter == "D"			Return 32		ElseIf asCharacter == "F"			Return 33		ElseIf asCharacter == "G"			Return 34		ElseIf asCharacter == "H"			Return 35		ElseIf asCharacter == "J"			Return 36		ElseIf asCharacter == "K"			Return 37		ElseIf asCharacter == "L"			Return 38		ElseIf asCharacter == "Z"			Return 44		ElseIf asCharacter == "X"			Return 45		ElseIf asCharacter == "C"			Return 46		ElseIf asCharacter == "V"			Return 47		ElseIf asCharacter == "B"			Return 48		ElseIf asCharacter == "N"			Return 49		ElseIf asCharacter == "M"			Return 50		EndIf	ElseIf StringUtil.IsDigit(asCharacter)		If asCharacter == "1"			Return 2		ElseIf asCharacter == "2"			Return 3		ElseIf asCharacter == "3"			Return 4		ElseIf asCharacter == "4"			Return 5		ElseIf asCharacter == "5"			Return 6		ElseIf asCharacter == "6"			Return 7		ElseIf asCharacter == "7"			Return 8		ElseIf asCharacter == "8"			Return 9		ElseIf asCharacter == "9"			Return 10		ElseIf asCharacter == "0"			Return 11		EndIf	ElseIf asCharacter == " "		Return 57	ElseIf asCharacter == "-"		Return 12	ElseIf asCharacter == "="			Return 13	ElseIf asCharacter == "["		Return 26	ElseIf asCharacter == "]"		Return 27	ElseIf asCharacter == ";"		Return 39	ElseIf asCharacter == "'"		Return 40	ElseIf asCharacter == "~"		Return 41	ElseIf asCharacter == ","		Return 51	ElseIf asCharacter == "."		Return 52	ElseIf asCharacter == "/"		Return 53	ElseIf asCharacter == " "		Return 57	EndIfEndFunction

...and, with Papyrus, 'Console("Bat Man")'. The console will pop up momentarily, but the batch file will run provided its characters are accounted for in the GetDXScanCode function.

Needless to say; this'll only work w/ SKSE


Edit: Pulled two unnecessary arguments.
Edit: Fixed GetDXScanCode so it'll work with strings bearing spaces.
Edit: Replaced Bat() with Console() so any console command can be run.
User avatar
Roberta Obrien
 
Posts: 3499
Joined: Tue Oct 23, 2007 1:43 pm

Post » Wed Jun 20, 2012 8:52 pm

WOW! Thanks! :yes:

Say you have a Man.txt batch file:


...and, with Papyrus, 'Bat("Man")'. The console will pop up momentarily, but the batch file will run provided its characters are accounted for in the GetDXScanCode function.

Needless to say; this'll only work w/ SKSE
User avatar
leigh stewart
 
Posts: 3415
Joined: Mon Oct 23, 2006 8:59 am

Post » Thu Jun 21, 2012 1:17 am

No prob. :) I've been wanting to figure out a way to run bats from Papyrus for some time. Huzzah for StringUtil! It should work for most applications, but I didn't test anything with more than letters...

It's not case-sensitive and I'm not sure, w/o Input.HoldKey(), how to get the alternates like '?'. Then again, a Windows file can't have most of those characters in its name anyway.

For any console command with the above GetDXScanCode function: Console("Bat Man")/Console("TCL")/Console("Set KillMove to 0)"/etc.

Function Console(String asCommand = "", Int aiCharIndex = 0, Int aiStringLength = 0)	Input.TapKey(41) ; '~'	aiStringLength = StringUtil.GetLength(asCommand)	While (aiCharIndex < aiStringLength)		Input.TapKey(GetDXScanCode(StringUtil.GetNthChar(asCommand, aiCharIndex)))		aiCharIndex += 1	EndWhile	Input.TapKey(28) ; 'Enter'	Input.TapKey(41) ; '~'EndFunction

Might as well just keep Console() and ditch Bat()... You might be able to get away without using a .txt file unless the batch file has conditions.

Also, this might not work so well if *shudders* AZERTY.
User avatar
Allison Sizemore
 
Posts: 3492
Joined: Wed Jul 19, 2006 6:09 am


Return to V - Skyrim