2014-02-12 12 views
5

Ich habe ein Problem mit dem aktuellen Projekt, an dem ich gerade arbeite. Ich muss eine Abfrage aus einer Datei in eine Variable gespeichert bekommen, deren Datei nur eine Abfrage enthält (sie wird von einem Teil des Programms erzeugt). Zum Beispiel verwende ich den folgenden Code:Wie überschreibt man die Chargenvariable Anzahl der Zeichen?

set /p query=<path\to\my\folder\fileContainingQuery.soql 

Es funktioniert, wenn die Abfrage nicht so lange, aber wenn seine Länge über 1024 Zeichen ist, ist die Abfrage abgeschnitten und da es in einer anderen Konfiguration sendet Datei musste mit das FART-Tool, das ist ziemlich unpraktisch.

Wie kann dieses Problem behoben werden?

Antwort

2

Es gibt eine Begrenzung, wie viele Daten in einer Umgebungsvariablen gespeichert werden können. Theoretisch beträgt die maximale Länge 32767 Zeichen, ABER eine Batchdatei kann keine Variable festlegen, die länger als die maximale Befehlszeilenlänge ist (8192).

können Sie einen for /f Befehl verwenden, um die Linie

for /f "usebackq delims=" %%f in ("path\to\my\folder\fileContainingQuery.soql") do set "q=%%f" 

lesen Sie können auch eine Hilfsstapeldatei erzeugen, um den Inhalt der Abfrage

<nul set/px=set q=>sql.set.cmd 
type "path\to\my\folder\fileContainingQuery.soql">>sql.set.cmd 
call sql.set.cmd 

zuweisen und beide werden die maximal mögliche bekommen Text in die Variable NUR, wenn die letzte Befehlszeile nicht zu groß ist (8186 Zeichen in meinen Tests). In anderen Fällen wird nichts abgerufen.

ABER, sobald der Wert abgerufen wurde, muss innerhalb eines Befehls verwendet werden. Und hier passiert die gleiche Einschränkung. 8192 ist die maximale Zeilenlänge und der Inhalt der Variablen IS innerhalb der Zeile.

Also, Ihre letzte Grenze für die Länge der Abfrage ist weniger als das.

2

@MC ND: Danke für Ihre Antwort, ich habe den for /f Befehl auf diese Weise verwendet, nachdem ich daran gedacht habe. (Habe deine Antwort in diesem Moment nicht gelesen).

(for /f "delims=" %%b in (path\to\my\folder\fileContainingQuery.soql) do (
    set query=%%b 
)) 
echo %query% 

für mein vorheriges Problem Meine Hypothese ist, dass die eingestellte/p var Funktion nur 1024 Zeichen auf Benutzereingaben akzeptieren kann, und als meine Abfrage-Datei nur eine Zeile enthält, welche Länge als diese Grenze größer sein könnte, es kürzt die Abfrage. Der obige Code funktioniert gut für mich und ich bekomme meine komplette Abfrage in der Variablen.

+0

Vielen Dank. es hat auch für mich funktioniert. – picnic4u

Verwandte Themen