eclipse - Lua programmering - os.execute () virker ikke i Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skaber en funktion i ren-Lua for at scanne filerne fra en mappe og sætte dem på en anden fil.


Kommandoen jeg tryed var:


os.execute( "dir /B C:\Users\Fernando\workspace\Organizator2\s1 > 
C:\Users\Fernando\workspace\Organizator2\temp.txt" ) 


men ... virker ikke! Jeg gjorde mange tests med andre enklere kommandoer, som 'start notesblok' eller 'mkdir C: \ test', og de fungerede også! Den værre del er, at jeg trykte disse samme kommandoer direkte i Prompt, og der er alt korrekt.


Jeg tryeded brug til io.popen (), men det returnerede systemet 'ulovlig drift' for enhver kommando jeg bestod (selv en tom streng!).


her er hele koden:


function ScanDirectory(source, str) 
    local str = str or "temp.txt" 
    os.execute("dir /B "..source.." > "..str) 
    directory = io.open(str,"r") 
    return directory 
end 

--  main script 

do 
    local source = "C:\Users\Fernando\workspace\Organizator2\s1" 
    local directory  = ScanDirectory(source, "C:\Users\Fernando 
workspace\Organizator2\temp.txt") 
end 


Jeg bruger Windows 7 og Luaforwindows, 5.1 og LuaEclipse


Har nogen nogensinde set et problem som dette?

Bedste reference


Jeg har lige testet din kode på min computer, og det fungerer korrekt (med mine biblioteker, selvfølgelig). Måske får du ikke det forventede resultat, fordi din directory streng er brudt med en newline char, hvilket resulterer i:


dir /B C:UsersFernandoworkspaceOrganizator2s1 > C:UsersFernando
workspaceOrganizator2	emp.txt


Det korrekte skal være:


dir /B C:UsersFernandoworkspaceOrganizator2s1 > C:UsersFernandoworkspaceOrganizator2	emp.txt


Prøv at ændre slutningen til:


local source = "C:\Users\Fernando\workspace\Organizator2\s1" 
local directory  = ScanDirectory(source, "C:\Users\Fernando\workspace\Organizator2\temp.txt") 

Andre referencer 1


Prøv det med denne syntaks:


os.execute [**"dir /B C:UsersFernandoworkspaceOrganizator2s1 > C:UsersFernandoworkspaceOrganizator2 emp.txt"**]


Vær opmærksom på, at backslash () ikke er et særligt tegn i dette tilfælde.
(Lua bruger cstrings internt, nogle gange fører det til nogle underlige og fantastiske resultater: P)

Andre referencer 2


De fleste af de kommandoer, du har angivet, synes at være shellkommandoer, der kun fungerer inden for en kommandoprompt. Prøv at køre cmd.exe direkte for at se, om du får en prompt, og i så fald kan du prøve at overføre kommandoer til cmd.exe via alternativet/c. Du kan også prøve notesblok uden at begynde at se om det løber.

Andre referencer 3


os.execute('cmd.exe /c dir /B C:\> C:\test.txt')


Det virker. Brug af Linux-stil kommandoer i win er en dårlig ide overhovedet =)