2009-03-16 11 views
2

Ich benutze MSYS, um etwas Anschein von einer vernünftigen skriptfähigen Shell unter Windows zu bekommen :).C# Befehlszeilenargumente und ls

Jetzt schreibe ich eine Konsolenanwendung, geschrieben in C#, die eine Reihe von Argumenten akzeptiert und diese als Optionen dem Benutzer in einem Dialogfeld präsentiert. Die tatsächlichen Optionen entsprechen den Dateinamen, die ich mit ls abrufe.

Problem erscheint jedoch, wenn ich Dateinamen mit Leerzeichen in ihnen habe. Lassen Sie uns sagen, ich habe Dateien mit dem Namen:

file name 
with spaces 

In einem Verzeichnis namens foo, meine C# ausführbare Datei ist bar genannt, und im Inneren ich den Inhalt des „argv“ Array untersuchen (dh übergeben die Befehlszeilenargumente zu meinem Anwendung, wie von .NET interpretiert).

Die folgende Fremdheit passiert, wenn ich es nennen:

./bar.exe "Dateiname" "mit Leerzeichen" ->

file name 
with spaces 

./bar.exe $ (ls foo) ->

file 
name 
with 
spaces 

./bar.exe $ (ls -Q foo) ->

"file 
name" 
"with 
spaces" 

Weiß jemand, was hier passiert? Offensichtlich analysiert .NET die Argumente nicht, die entweder von bash oder ls korrekt übergeben werden.

Aber selbst wenn ich Anführungszeichen hinzufüge, sind die Anführungszeichen in den Argumenten enthalten, anstatt zwei Argumente zu einer zu kombinieren.

Gibt es sogar eine Möglichkeit für mich, die unverarbeitete Befehlszeile zu öffnen, damit ich sehen kann, ob Funksprüche mit Steuerzeichen oder etwas passieren?

Jeder Einblick würde sehr geschätzt werden!

Antwort

1

Sie können Environment.CommandLine verwenden, um den ursprünglichen Befehl zu erhalten. Ich bin mir nicht sicher über das Bash-Zeug, sorry; vielleicht etwas mit Zeilenenden (CR vs LF vs CRLF vs LFCR).

-1

habe ich in meinem Projekt RegawMOD.Android Bibliothek

Device device = android.GetConnectedDevice(android.ConnectedDevices[0]); 

objArray = new object[] { "ls", string.Concat("/sdcard/")) }; 

str = Adb.ExecuteAdbCommand(Adb.FormAdbCommand(device, "shell", objArray)); 
// or 
// str= Adb.ExecuteAdbCommand(Adb.FormAdbCommand("shell",objArray)); 

Weitere Befehlsoptionen mit diesem Commands

+1

@Rahil dass bearbeiten besser ist die Post nicht machen sind vorbei. Benutzer: Sie scheinen die Frage nicht verstanden zu haben. – CodeCaster

+0

@CodeCaster Ich war mir nicht sicher über die 'device' Klasseninstanz. –

+0

Ich meinte die Leerzeichen ändern, und das gleiche gilt für @ Lorenzo Edit. Die Formatierung dieses Beitrags ist in Ordnung, wie er ist, er wird nicht lesbarer, wenn er zufällige Zeilenumbrüche einfügt. – CodeCaster

0

Besuche ich glaube, das Problem ist, dass Sie Parameter in der Befehlszeile und Befehlszeile liest jedes Wort sind vorbei als separater Parameter; Versuchen Sie „Dateinamen“ „Mit Spaces“ ..
tun, wenn Sie es durch Code verwenden

ProcessStartInfo.Arguments = "\"File Name \"" ; 

als Argumente für Ihren Prozess