2 Stimmen

DOS-Batch-Prozess zum Verschieben von Dateien in die entsprechenden Verzeichnisse

Ich möchte einen DOS-Batch-Prozess schreiben, der mein Verzeichnis durchsucht und alle *.txt-Dateien in einen Zielordner verschiebt, der mit dem ersten Zeichen der txt-Dateien beginnt

Ex.
abc.txt wird in den Ordner "a" verschoben
def.txt wird in den Ordner "d" verschoben
und so weiter...

4voto

lavinio Punkte 23413

Über die Befehlszeile:

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

In einer Batch-Datei müssten Sie die %-Angaben verdoppeln, etwa so:

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

0voto

Jonathan Punkte 11561

Ich denke, das Ziel der Aufgabe ist es, den ersten Buchstaben zu extrahieren.

Sie können das Zeichen ~ verwenden, um den ersten Buchstaben des Dateinamens zu extrahieren

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

0voto

Sie können die Biterskription verwenden chex-Befehl (Zeichenextrahierer) um das erste Zeichen des Dateinamens zu extrahieren. Hier ist das Skript. Angenommen, Ihre Dateien befinden sich unter C:\My 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

Das Skript ist in Biterscripting ( http://www.biterscripting.com ) . Um es zu versuchen, speichern Sie das Skript als C:\Scripts\move1.txt Um Biterscripting zu starten, geben Sie den folgenden Befehl ein.

script move1.txt

Wenn Sie das Skript regelmäßig ausführen müssen, planen Sie den folgenden Befehl in der Aufgabenplanung.

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

Ich habe das Skript nicht getestet, testen Sie es mit Beispieldateien. Vergewissern Sie sich, dass Sie die " C:\My Verzeichnis" und " C:\Destination Ordner" auf ihre korrekten Werte. Verwenden Sie bei Dateinamen und Pfaden immer Anführungszeichen.

0voto

Richard Punkte 29

Wie wäre es, wenn dies eine Zeile wäre:

die allgemeine Form: for %a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do if not exist %a \nul md %a & if exist %a* move %a* %a

diese Mod wird nur die txt-Dateien (nach dem OP) zu tun: ... if exist %a*.txt move %a*.txt %a

oder man könnte dies in einer Fledermaus erweitern, um "...if exist %%a*%1 move %%a*%1 %%a" zu tun, um den Abgleich von Erweiterungen auf der Kommandozeile zu ermöglichen; was wahrscheinlich den Punkt in %1 erfordern würde (habe gerade keine Lust, das zu testen. Wenn das ein Problem wäre, könnte man immer ein if%1!==! haben, um zwischen der allgemeinen Form und einer %1-spezifischen mit dem Punkt zu wählen.

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

Diese Lösung vermeidet Fehler mit Leerzeichen in Dateinamen, aber Sie haben dann ein Unterverzeichnis für jeden Buchstaben (auch wenn es keine Dateien gibt, die mit diesem Buchstaben beginnen).

und ich habe jetzt länger gebraucht, um das hier zu tippen, als für die ursprüngliche Zeile oben... :-)

0voto

SarjanWebDev Punkte 483

Zählt alle TSV-Dateien im aktuellen Ordner.

for /f "delims=|" %%f in ('dir *.tsv /b') do (
echo %%~nf
findstr /R /N "^" %%f | find /C ":"
)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X