[Solved] Dateien zusammenführen: Unterordner auflösen.

German support forum

Moderators: sheep, Hacker, Stefan2, white

pgomes
Junior Member
Junior Member
Posts: 37
Joined: 2009-12-20, 16:39 UTC

[Solved] Dateien zusammenführen: Unterordner auflösen.

Post by *pgomes » 2015-10-04, 00:03 UTC

hallo

gibt es eine einfachere Methode um Unterordner aufzulösen und diesen Inhalt in den Ausgangsordner zu verschieben als:

Total Commander -> Befehle -> Kommandozeilenfenster öffnen > im cmd gebe ich

Code: Select all

"FOR /R %f IN (*) DO MOVE "%f" ."
ein und der rödelt vor sich hin die dateinen sind im ordner und die unterordner leer.

dann lösche ich die ordner von hand oder gebe

Code: Select all

"FOR /R %f IN (.) DO RD "%f""
ein.

gibt es eine 1-klick-Möglichkeit?

ich habe es mit einer batch versucht aber ich bekomme das mit der pfad übergabe nicht hin, der wechselt nicht das laufwerk. bei cd zeigt der zwar den richtigen pfad aber wenn er for /r geht der wieder zurück.

Code: Select all

cd %1
FOR /R %f IN (*) DO MOVE "%f" .
FOR /R %f IN (.) DO RD "%f"
diese änderung hat auch nix gebacht:

Code: Select all

set path=%1
cd %path%
FOR /R %f IN (*) DO MOVE "%f" .
FOR /R %f IN (.) DO RD "%f"
lg

pg
Last edited by pgomes on 2015-10-04, 19:50 UTC, edited 1 time in total.

User avatar
Dalai
Power Member
Power Member
Posts: 6739
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai » 2015-10-04, 01:28 UTC

Benutze die Zweigansicht (Strg+B), markiere alle Dateien und verschiebe die Dateien (F6) in ein Zielverzeichnis. Fertig. OK, nicht ganz fertig, aber die nun leeren Verzeichnisse lassen sich ja einfach ermitteln und löschen.

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups

User avatar
Stefan2
Power Member
Power Member
Posts: 2640
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Dateien zusammenführen: Unterordner auflösen.

Post by *Stefan2 » 2015-10-04, 09:23 UTC

pgomes wrote: ich habe es mit einer batch versucht aber ich bekomme das mit der pfad übergabe nicht hin, der wechselt nicht das laufwerk.
Öffne mal eine DOS-Box und gebe 'cd /?' ein:
C:\Users\User>cd /?
Wechselt das Verzeichnis oder zeigt dessen Namen an.

CHDIR [/D] [Laufwerk:][Pfad]
CHDIR [..]
CD [/D] [Laufwerk:][Pfad]
CD [..]


Verwenden Sie die /D-Option, um zusätzlich zum Wechseln des Verzeichnisses
auch das aktuelle Laufwerk zu wechseln.


- - -
pgomes wrote:

Code: Select all

set path=%1
BTW: 'PATH' ist eine Systemvariable, welche man nicht, auch nicht temporär, verändern sollte.
In 'PATH' sind die Ordner aufgelisted, welche Standardmäßig nach ausführbaren Dateien durchsucht werden.
Öffne eine DOS-Box und gebe 'PATH' ein...

Verwende besser 'CWD' oder 'myPath' als Variablenname.



- - -


Du kannst deine Batch auch von einem TC-Button bzw. usercmd aus aufrufen,
und den aktuellen Ordner mittels der TC-Variable '%P' übergeben.

Dadurch hast du dein eigenes 'Purge'-Kommando erstellt,
welche du in Zukunft ganz einfach jederzeit aufrufen kannst.

Durch ein usercmd kannst du es auch per Tastaturkürzel aufrufen, oder auch in das TC-Menü einbauen.


 
Inofficial FAQs || WIKI (Deu/Eng) || TC Home (What's new? // FAQ // Download // Order // Addons // Tools // Plugins)
Erst wenn der letzte Baum gefällt oder die letzte Biene verendet ist, werden die Leute verstehen warum Umweltschutz wichtig ist.

pgomes
Junior Member
Junior Member
Posts: 37
Joined: 2009-12-20, 16:39 UTC

Post by *pgomes » 2015-10-04, 12:15 UTC

danke dafür


Code: Select all

CD /D %1
FOR /R "%f" IN (*) DO MOVE "%f" .
funktioniert lieder auch nicht

User avatar
ZoSTeR
Power Member
Power Member
Posts: 920
Joined: 2004-07-29, 11:00 UTC

Post by *ZoSTeR » 2015-10-04, 12:56 UTC

Teste mal hiermit:

Code: Select all

CD /D %1
FOR /R %%f IN (*) DO MOVE "%%f" .
FOR /D /R %%f IN (*) DO RD "%%f"

pgomes
Junior Member
Junior Member
Posts: 37
Joined: 2009-12-20, 16:39 UTC

Post by *pgomes » 2015-10-04, 19:48 UTC

:mrgreen: :mrgreen: ja yes yes danke ZoSTeR es funktioniert :!:
ZoSTeR wrote:Teste mal hiermit:

Code: Select all

CD /D %1
FOR /R %%f IN (*) DO MOVE "%%f" .
FOR /D /R %%f IN (*) DO RD "%%f"
:mrgreen:

pgomes
Junior Member
Junior Member
Posts: 37
Joined: 2009-12-20, 16:39 UTC

Choice

Post by *pgomes » 2016-02-10, 00:25 UTC

hallo

das script ging so gut das alles durcheinander war weil ich es nicht in der quelle angewendet habe sondern im ziel.

wie kann ich das per abfrage ändern. ich habe mir das mit choice gedacht. pause steht für das o.g. script.

Fehler ist das der der bei dem es egal ist was ich eingebe immer
if errorlevel 1 goto ja

pause
Drücken Sie eine beliebige Taste . . .
erscheint

Code: Select all

CHOICE /T 30 /C JNA /D N /M "Druecken Sie J fuer Ja, N fuer N ein oder A fuer Abbrechen."
if errorlevel 1 goto ja
if errorlevel 2 goto nein
if errorlevel 3 goto Abbrechen
:ja
pause
:nein
goto Abbrechen
:Abbrechen
exit

User avatar
Stefan2
Power Member
Power Member
Posts: 2640
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Batchdatei Userabfrage

Post by *Stefan2 » 2016-02-10, 07:56 UTC

C:\Users\username>choice /?
...
......
HINWEIS:
Führen Sie die ERRORLEVEL-Parameter in absteigender Reihenfolge
auf, falls Sie diese in einem Batchprogramm verwenden.

Und nach einem Abschnitt musst du auch explizit Abbrechen oder wo anders hin springen, sonst macht der Interpreter einfach mit dem nächsten Abschnitt weiter.


 

Code: Select all

@ECHO OFF
CHOICE /T 30 /C JNA /D N /M "Druecken Sie J fuer Ja, N fuer N ein oder A fuer Abbrechen."
if errorlevel 3 goto Abbrechen
if errorlevel 2 goto nein
if errorlevel 1 goto ja

:ja
ECHO Hier ist JA
pause
goto :EOF (Springe ans Ende)

:nein
ECHO Hier waren wir kurz bei NEIN
PAUSE
goto Abbrechen

:Abbrechen
Am Skriptende ist automatisch Schluss.


Hier ist noch ein anderer Ansatz:

 

Code: Select all

@ECHO OFF
:START
ECHO. & ECHO.
SET /P Frage=Druecken Sie J fuer Ja, N fuer N ein oder A fuer Abbrechen:
If /I %Frage%==J GoTo _J
If /I %Frage%==N GoTo _N
If /I %Frage%==A GoTo :EOF (Am Skriptende ist automatisch Schluss)
ECHO Versuche es noch einmal... & GOTO:START

:_J
ECHO Hier ist JA!   & PAUSE
GOTO :EOF

:_N
ECHO Hier ist NEIN. & PAUSE

Am Skriptende ist automatisch Schluss.


 
Inofficial FAQs || WIKI (Deu/Eng) || TC Home (What's new? // FAQ // Download // Order // Addons // Tools // Plugins)
Erst wenn der letzte Baum gefällt oder die letzte Biene verendet ist, werden die Leute verstehen warum Umweltschutz wichtig ist.

pgomes
Junior Member
Junior Member
Posts: 37
Joined: 2009-12-20, 16:39 UTC

Post by *pgomes » 2016-02-11, 01:23 UTC

hallo danke für die Informationen

ich habe mir das noch mal weiter angepasst.

Code: Select all

@ECHO OFF
COLOR 4F
echo Auflösen aller Unterordner von %CD%\ ?
CHOICE /T 30 /C JNA /D A /M "Drücken Sie J für Ja, N für Nein ein oder A für Abbrechen oder 30 Sekunden warten (Autoabbruch)"
if errorlevel 3 goto Abbrechen
if errorlevel 2 goto nein
if errorlevel 1 goto ja

:ja
ECHO Hier ist JA
timeout 30
goto :EOF (Springe ans Ende)

:nein
ECHO Hier waren wir kurz bei NEIN & COLOR 2F
timeout 30
goto :EOF

:Abbrechen
ECHO Programm wird abgebrochen & COLOR 2F & timeout 30
Aufl÷sen aller Unterordner von e:\OO\BB\ ?
Dr³cken Sie J f³r Ja, N f³r Nein ein oder A f³r Abbrechen oder 30 Sekunden warten (Autoabbruch) [J,N,A]?
wie kriege ich diese DOS-Umlaute. Früher habe ich die Batch noch mal im EDIT.COM geöffnet und dann die ö ü ä eingetippt.[/code]

User avatar
Stefan2
Power Member
Power Member
Posts: 2640
Joined: 2007-09-13, 22:20 UTC
Location: Europa

VBScript: ANSI 2 OEM - DOS 850 -to- Windows 1252 code page

Post by *Stefan2 » 2016-02-11, 08:46 UTC

pgomes wrote:
Aufl÷sen aller Unterordner von e:\OO\BB\ ?
Dr³cken Sie J f³r Ja, N f³r Nein ein oder A f³r Abbrechen oder 30 Sekunden warten (Autoabbruch) [J,N,A]?
wie kriege ich diese DOS-Umlaute. Früher habe ich die Batch noch mal im EDIT.COM geöffnet und dann die ö ü ä eingetippt.[/code]
Mit einem guten Texteditor und Ändern der Kodierung (Recode to OEM850)
Ich hab' das aber damit nie wieder richtig hinbekommen.
Aber es gibt diverse Kommandozeilentools für diese Umwandlung.
Oder ein simples Skript mit Autohotkey, PoSh, oder VBScript:

Code: Select all

'//Change Windows Codepage CP1252 (ANSI Latin 1; Western European (Windows)) 
'//     To OEM DOS Codepage CP850 (Latin-1, Western Europe)
'//      and vice versa.

'//  ---  Auflösen aller Unterordner von e:\OO\BB\ ?
'//  ---  Der Öltanker öffnete änderte Ärger drückte Übergewicht Größe müsste 
'//  ---  Drücken Sie J für Ja, N für Nein ein oder A für Abbrechen oder 30 Sekunden warten (Autoabbruch) [J,N,A]?
'//  ---  
'//  ---  Aufl”sen aller Unterordner von e:\OO\BB\ ?
'//  ---  Der ™ltanker ”ffnete „nderte Žrger dr￾ckte šbergewicht Gr”áe m￾sste 
'//  ---  Dr￾cken Sie J f￾r Ja, N f￾r Nein ein oder A f￾r Abbrechen oder 30 Sekunden warten (Autoabbruch) [J,N,A]?


'// Call this VBScript with "D:\rive\path\to\Textfile.txt" as parameter.
'// For Total Commander e.g. create an Button like:
'// COMMAND: "D:\rive\path\to\ThisVBScript.vbs"
'// PARAMETER: "%S1"
'//
'// Next select an Textfile and execute this VBSCript. Done
'///////////////////////////////////////////////////////////////////////////
DIM FSO	 : SET FSO	= WScript.CreateObject("Scripting.FileSystemObject")
Const OpenForReading = 1, OpenForWriting = 2, OpenForAppending = 8
'################ Work on this file:
strFileName = Wscript.Arguments.Item(0) 'Due to TCs "%S" parameter.
'msgbox strFileName
'################ Read file content to variabel:
SET oFile = FSO.OpenTextFile(strFileName,OpenForReading)
sText = oFile.ReadAll
oFile.Close 
'################ replace char in variable:
'//choose one of this two modes:
'Mode = "ANSI2OEM"
'Mode = "OEM2ANSI"
Mode = InputBox("ANSI2OEM (O) or OEM2ANSI (A) ?","TC VBScript", "ANSI2OEM")
If(UCase(Mode)="A2O") OR (UCase(Mode)="OEM")  OR (UCase(Mode)="O") Then Mode = "ANSI2OEM"
If(UCase(Mode)="O2A") OR (UCase(Mode)="ANSI") OR (UCase(Mode)="A") Then Mode = "OEM2ANSI"
'################ 
If(UCase(Mode) = "ANSI2OEM") Then 'ANSI Windows to OEM DOS
    FSO.CopyFile strFileName, strFileName & "_ANSI.bak" 'Sicherheitskopie der originalen Datei.
    sText = replace(sText, chr(228), chr(132))
    sText = replace(sText, chr(246), chr(148))
    sText = replace(sText, chr(252), chr(129))
    sText = replace(sText, chr(196), chr(142))
    sText = replace(sText, chr(214), chr(153))
    sText = replace(sText, chr(220), chr(154))
    sText = replace(sText, chr(223), chr(225))
End If '(Mode = "ANSI2OEM")
If(UCase(Mode) = "OEM2ANSI") Then 'OEM DOS to ANSI Windows
    FSO.CopyFile strFileName, strFileName & "_OEM.bak" 'Sicherheitskopie der originalen Datei.
    sText = replace(sText, chr(132), chr(228))
    sText = replace(sText, chr(148), chr(246))
    sText = replace(sText, chr(129), chr(252))
    sText = replace(sText, chr(142), chr(196))
    sText = replace(sText, chr(153), chr(214))
    sText = replace(sText, chr(154), chr(220))
    sText = replace(sText, chr(225), chr(223))
End If '(Mode = "OEM2ANSI")
'################ Write file back with teplaced chars:
Set oFile = FSO.CreateTextFile(strFileName,True)
oFile.Write sText
oFile.Close 
'################ 
MsgBox Mode & " on " & strFileName & " done!"
'################ EOF


 
Inofficial FAQs || WIKI (Deu/Eng) || TC Home (What's new? // FAQ // Download // Order // Addons // Tools // Plugins)
Erst wenn der letzte Baum gefällt oder die letzte Biene verendet ist, werden die Leute verstehen warum Umweltschutz wichtig ist.

pgomes
Junior Member
Junior Member
Posts: 37
Joined: 2009-12-20, 16:39 UTC

Post by *pgomes » 2016-02-11, 23:22 UTC


User avatar
ZoSTeR
Power Member
Power Member
Posts: 920
Joined: 2004-07-29, 11:00 UTC

Post by *ZoSTeR » 2016-02-13, 15:11 UTC

Batch als ANSI speichern und auf Codepage 1252 wechseln.

Code: Select all

chcp 1252
Echo öäü
pause
oder als UTF-8 auf Codepage 65001

pgomes
Junior Member
Junior Member
Posts: 37
Joined: 2009-12-20, 16:39 UTC

Post by *pgomes » 2016-02-14, 20:33 UTC

danke danke für die antworten. :D :D :D

pgomes
Junior Member
Junior Member
Posts: 37
Joined: 2009-12-20, 16:39 UTC

Re: [Solved] Dateien zusammenführen: Unterordner auflösen.

Post by *pgomes » 2018-08-27, 14:28 UTC

Hallo!

Soweit läuft die Batchdatei nur habe ich festgestellt, das doppelte Dateinamen überschrieben werden. Das ist extrem blöd. Kann das irgendwie umgangen werden.

grüße

User avatar
Stefan2
Power Member
Power Member
Posts: 2640
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: [Solved] Dateien zusammenführen: Unterordner auflösen.

Post by *Stefan2 » 2018-08-27, 14:33 UTC

2pgomes
Von welcher Batchdatei redest du?
Poste mal deine verwendete Batch, dann kann die jemand anpassen.


 
Inofficial FAQs || WIKI (Deu/Eng) || TC Home (What's new? // FAQ // Download // Order // Addons // Tools // Plugins)
Erst wenn der letzte Baum gefällt oder die letzte Biene verendet ist, werden die Leute verstehen warum Umweltschutz wichtig ist.

Post Reply