130834
Goto Top

Kopfschmerzen (Batch)

for /l %%I in (1 1 10) DO (
set "num=%%I"  
start "splitThread!num!" "cmd /c for /R "%userprofile%\lists" %%D IN (list*!num!.txt) DO (for /f "delims=" %%F in (%%D) DO (echo %%F >>"%userprofile%\Desktop\newList.txt"))"  
)

"" " Kann syntaktisch an dieser Stelle nicht verarbeitet werden


Ich sterbe während die Flammen meiner Rage mich innerlich verzehren.

hallo Leute,

Heute habe Ich nur diese eine kurze Frage;

Warum Bekomme ich diesen äußerst unangenehmen Fehler?

Ich sehe nicht einmal eine "" " Konstellation T~T

Ich hab das Gefühl dieser Fehler ist wieder einmal besonders Witzig und Offensichtlich.

hoffe auf schnelle Hilfe...

lg clragon

Content-Key: 327607

Url: https://administrator.de/contentid/327607

Ausgedruckt am: 29.03.2024 um 13:03 Uhr

Mitglied: rubberman
Lösung rubberman 27.01.2017 um 01:40:42 Uhr
Goto Top
Vorwiegend liegt es daran dass du folgendes nicht tust:
1) cmd aufrufen
2) Option /c übergeben
3) dein Schleifenkonstrukt übergeben
Warum? Weil nur das Schleifenkonstrukt in seiner Gesamtheit in Anführungszeichen gehört, damit es als Argument an die cmd übergeben wird.

Mal sämtliche unnötigen Klammern weggelassen und das vermutlich unerwünschte Leerzeichen bei der Umleitung in die Datei eliminiert, könnte das so aussehen:
for /l %%I in (1 1 10) DO (
set "num=%%I"  
start "splitThread!num!" cmd /c "for /R "%userprofile%\lists" %%D IN (list*!num!.txt) DO for /f "delims=" %%F in (%%D) DO >>"%userprofile%\Desktop\newList.txt" echo %%F"  
)
Die eine oder andere Kleinigkeit (wie bspw. der Sinn der FOR /R Schleife) verstehe ich allerdings nicht.

Grüße
rubberman
Mitglied: 130834
130834 28.01.2017 um 15:14:57 Uhr
Goto Top
Die eine oder andere Kleinigkeit (wie bspw. der Sinn der FOR /R Schleife) verstehe ich allerdings nicht.

Ist auch nicht so wichtig. Mein Algorithmus braucht aktuell 1h 40 min um 56 GB / 17 k - 29 k Dateien lokal-lokal zu kopieren.
Bin mit dem Ergebnis nicht unzufrieden.
Mitglied: rubberman
rubberman 28.01.2017 um 16:48:55 Uhr
Goto Top
Was zum Teufel machst du da?

Nur mal so ... Du erzeugst eine Liste mit Robocopy, dann splittest du die Liste, danach kopierst du (so zumindest habe ich das gerade verstanden). Wie wäre es, Robocopy gleich dazu zu verwenden, für was es gedacht ist? Mit Option /MT gibt es sogar einstellbares Multithreading ...

Grüße
rubberman
Mitglied: 130834
130834 28.01.2017 aktualisiert um 20:56:04 Uhr
Goto Top
Haha. Copy ist nur ein Platzhalter, da Multithreading für einen reinen Echo-Durchlauf nicht effizient ist.
Der Prozess muss eine gewisse Laufzeit haben damit die Engine ihre Kraft überhaupt entfalten / zeigen kann.
Da ich testen musste wie sich meine Engine in Praxis verhält brauchte ich irgendeinen Prozess mit einer gewissen Laufzeit.
In dem Fall, copy, das am nächsten Liegende, was keine Datei-Änderung durchführt.

EDIT; Ach ja wenn's dich intressiert, die FOR /R schleife durchläuft die Listen welche !num! am Ende haben..
Warum? ich hatte vorher etwa 500-900 Listen welche alle namen wie "ListeXXX" hatten.
Also hab ich der Einfachheit-halber gesagt, nimm alle Listen welche mit der Thread Nummer ( !num! ) aufhören.
Passte grad gut mit den 10 Threads. Inzwischen bin ich aber auf einen Split in nur 10 Listen ( Dateien / 10 = Linien per Liste ) umgestiegen,
und benötige die FOR /R Schleife gar nicht mehr.