2009-08-07 2 views
2

ich einen DOS-Batch-Prozess schreiben will, das durch mein Verzeichnis gehen und alle * .txt Dateien in einem Ordner verschieben dest mit dem ersten Zeichen der TXT-Dateien zu startenDOS Batch-Dateien verarbeiten zu entsprechenden Ordnern verschieben

Bsp.
abc.txt bewegt sich in den Ordner "a"
def.txt wird
und so weiter ... sourcepath

+0

Zur Verdeutlichung meinen Sie eine Batch-Datei für die Verwendung in reinem DOS oder in der Eingabeaufforderung unter Windows? – Synetech

Antwort

4

in der Befehlszeile:

for %i in (*.txt) do (set FOLDER=%i & move %i %FOLDER:~0,1%) 

In einer Batch-Datei, würden Sie die% 's verdoppeln müssen, wie folgt aus:

for %%i in (*.txt) do (set FOLDER=%%i & move %%i %FOLDER:~0,1%) 
+0

Hinzufügen ** und wenn nicht vorhanden% ORDNER: ~ 0,1% md% FOLDER: ~ 0,1% ** direkt vor dem ** move ** Wort ist entscheidend, sonst werden Dateien in eine Datei namens "a", "b" usw. verschoben ... Aber es funktioniert. Beenden Sie den Befehl move mit einem Backslash im Pfad, wie **% FOLDER: ~ 0,1% \ **, um auf der sicheren Seite zu sein. – Jay

-1
copy sourcepath\a*.txt destinationpath\a 

Kopie in den Ordner "d" bewegen \ b * .txt DestinationPath \ b

+0

Ich brauche ein automatisiertes Skript, das durch das Verzeichnis geht und dieses genaue Ding von selbst tut :) –

+0

Ganz zu schweigen davon, wäre das Kopieren, nicht verschieben – Snekse

0

Ich denke, der Punkt des Problems ist, den ersten Buchstaben zu extrahieren.

können Sie die ~ char verwenden Sie den ersten Buchstaben des Dateinamens zu extrahieren

set str=filename 
echo %str:~0,1% 
f 
0

Sie können die biterscripting chex Befehl (Zeichen Extractor) verwenden das erste Zeichen des Dateinamens zu extrahieren. Hier ist das Skript. Angenommen, Ihre Dateien befinden sich in C: \ Mein Verzeichnis.

# Script move1.txt 
# Change directory to My Directory. 
cd "C:\My Directory" 

# Collect a list of *.txt files. 
var str list ; lf -n "*.txt" > $list 

# Go thru files one by one. 
while ($list <> "") 
do 

    # Get the next file. 
    var str file ; lex "1" $list > $file 

    # $file now has full path of a found *.txt file. Get just the file name. 
    var str filename ; stex -p "^/^l[" $file > $filename 

    # $filename has just the file name. Get the first character. 
    var str firstchar ; chex -p "1" $filename > $firstchar 

    # $firstchar now has the first char of file name. The folder where we 
    # want to move this file is, then, C:\Destimation Folder\$firstchar . 
    var str destfolder ; set $destfolder = "C:\Destination Folder\"+$firstchar 

    # Move $file to $destfolder. 
    system move ("\""+$file+"\"") ("\""+$destfolder+"\"") 

done 

Script ist in biterscripting (http://www.biterscripting.com). Speichern Sie das Skript als C: \ Scripts \ move1.txt, starten Sie Biterscripting, und geben Sie den folgenden Befehl ein.

script move1.txt 

Wenn Sie das Skript regelmäßig ausführen müssen, planen Sie den folgenden Befehl im Taskplaner.

"C:\biterScripting\biterScripting.exe" "move1.txt" 

Ich habe das Skript nicht getestet, es auf Beispieldateien testen. Stellen Sie sicher, dass Sie die korrekten Werte für "C: \ Mein Verzeichnis" und "C: \ Zielordner" ändern. Verwenden Sie immer doppelte Anführungszeichen mit Dateinamen und Pfaden.

0

Wie wäre dies eine Zeile:

die allgemeine Form: für% a in (y z) existieren, wenn nicht% a \ nul md% ein & falls vorhanden% a * move% a * % a

diese mod nur die tXT-Dateien tun (pro OP): ... if% existiert * .txt * .txt% bewegt% ein

oder man könnte dies in einer Verbesserung der bat to do "... wenn vorhanden %% a *% 1 move %% a *% 1 %% a", um den Erweiterungs-Matching auf der Kommandozeile zu erlauben; Das würde wahrscheinlich den Punkt in% 1 erfordern (habe jetzt keine Lust, das zu testen. Wenn das ein Problem wäre, könntest du immer ein if% 1! ==! zwischen der allgemeinen Form und einer% 1-spezifischen wählen mit dem bereits vergebenen Punkt

natürlich ist% a für die Kommandozeile und für eine Fledermaus, verdoppeln Sie% s wie üblich (% a -> %% a).

Diese Lösung vermeidet Fehler mit Leerzeichen in Dateinamen, aber Sie werden mit einem Unterverzeichnis für jeden Buchstaben enden (auch wenn es keine Dateien gab, die mit diesem bestimmten Buchstaben beginnen).

und jetzt ist es mir genommen länger diese einzutippen als über die ursprüngliche Linie zu abtippen ... :-)

0

Count alle TSV Dateien im aktuellen Verzeichnis.