Nach längerer Suche frage ich doch lieber:
Die Ausgabe von einem DOS-Dir-Befehl in eine Datei macht Probleme mit den Umlauten. Alles Mögliche versucht, um beim Öffnen der Datei mit Excel oder Notepad++ eine korrekte Darstellung zu erhalten sind gescheitert. Wie kann ich entweder die Ausgabe von Dir direkt mit richtigen Umlauten erzeugen oder alternativ wie kann ich eine Datei mit den "falschen" Umlauten "übersetzen"?
Ich habe eine Function von AspirinJunkie gefunden, die das vielleicht kann. Aber die bricht immer ab in der Zeile
$s_Ret = DllCall($h_User32DLL, 'BOOL', 'OemToChar', 'str', $s_Ret, 'str', '')[2] mit
!>14:13:26 AutoIt3.exe ended.rc:-1073741819. Was mache ich falsch?
Code
$s_Cmd = "Dir"
$sParameter = "J:\kunden"
$b_CmdSpec = True
$WorkDir = @WorkingDir
$sResult = RunCmd($s_Cmd, $sParameter , $b_CmdSpec, $WorkDir)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sResult = ' & $sResult & @CRLF)
; #FUNCTION# ======================================================================================
; Name ..........: RunCmd()
; Description ...: runs commandline programs or cmd-command and return their output
; Syntax ........: RunCmd($s_Cmd, [$sParameter = '', [$b_CmdSpec = False, [$WorkDir = @WorkingDir]]])
; Parameters ....: $s_Cmd - the command which should be executed (can be full command or without parameters)
; $sParameter - additional parameters for the command (also array of parameters)
; $b_CmdSpec - If true the command is interpreted as a command for cmd.exe
; $WorkDir - the working directory
; Return values .: Success: returns a string with the output
; Failure: set @error and returns a debug-string
; Author ........: AspirinJunkie
; =================================================================================================
Func RunCmd($s_Cmd, $sParameter = '', $b_CmdSpec = False, $WorkDir = @WorkingDir)
Local Static $h_User32DLL = DllOpen('user32.dll')
If @error Then Return SetError(1, @error, "")
If $b_CmdSpec Then $s_Cmd = @ComSpec & " /c " & $s_Cmd
Local $s_Ret, $s_Line, $s_Err
If $sParameter <> '' Then
If IsArray($sParameter) Then
Local $s_Par = ""
For $j In $sParameter
$s_Par &= " " & $j
Next
$sParameter = $s_Par
Else
$sParameter = ' ' & $sParameter
EndIf
EndIf
Local $iPID = Run($s_Cmd & $sParameter, $WorkDir, @SW_HIDE, 0x2 + 0x4)
If @error Then Return SetError(2, @error, "")
Do
Sleep(10)
$s_Line = StdoutRead($iPID)
If @extended > 0 Then $s_Ret &= $s_Line
Until @error
Do
Sleep(10)
$s_Line = StderrRead($iPID)
If @extended > 0 Then $s_Err &= $s_Line
Until @error
$s_Ret = DllCall($h_User32DLL, 'BOOL', 'OemToChar', 'str', $s_Ret, 'str', '')[2]
If $s_Err <> "" Then
If $s_Ret <> "" Then Return SetError(3, 0, "------- StdOut -----------" & @CRLF & $s_Ret & @CRLF & @CRLF & "------- StdErr -----------" & @CRLF & $s_Err)
Return SetError(3, 0, $s_Err)
EndIf
Return $s_Ret
EndFunc ;==>RunCmd
Alles anzeigen