2017-05-04 4 views
0

Ich bin auf der Suche nach einem kurzen .bat-Skript, das einen partiellen Dateinamen abrufen und als Variable festlegen kann. Die Dateinamen werden konsequent die folgende Struktur sein, aber es vielleicht mehr als 1 Dateien gleichzeitig:Teilweise Dateiname als Variable ziehen

B06XTJ8RX3.MAIN.PC_430.jpg

oder

B06XTJ8RX3.MRG1 .PC_430.jpg

Während mehrere Dateien vorhanden sein können, sind die ersten 10 Zeichen identisch.

Ich möchte "B06XTJ8RX3" als Variable benennen. Bisher konnte ich das nur durch Schreiben der Dateinamen bis zum ersten '.' in ein Textdokument und dann ziehen Sie den Inhalt der Textdatei, indem Sie die doppelten Zeichenketten entfernen. All das scheint unnötig zu sein.

set images=C:\file_path\images\ 

for /F "tokens=1 delims=." %%A IN ('dir /b %images%') do echo %%A >> dupes.txt 

type NUL > asins.txt 

for /F %%i in ('type dupes.txt ^| sort') Do (

If NOT "!prev!" == "%%i" (echo %%i>>asins.txt) 
set prev=%%i 
) 

type NUL > dupes.txt 
set prev=5000 

Hat jemand eine einfache Lösung dafür?

Antwort

1
for /f "tokens=2delims==" %%x in (`set # 2^>nul`) do set "%%x=" 
set images=C:\file_path\images\ 

for /F "tokens=1 delims=." %%A IN ('dir /b %images%') do set /a "#%%A"+=1 

set # 

sollte

# B06XTJ8RX3 = 2

für die oben genannten Dateinamen (# Firstelement = Vorkommen)

Die for /f in der ersten Zeile berichten soll alle entfernen Variablen beginnend # aus der Umgebung.

Mit jeder erkannten Zeichenfolge erhöhen Sie die Anzahl der gefundenen #string.

for /f "tokens=1,2delims==" %%x in (`set # 2^>nul`) do if "%%y" neq 1 echo %%x 

sollte jeden Namen mit mehr als 1 Datei gefunden werden.


Wenn Sie, dass der n-Dateien im Verzeichnis garantieren, die ersten 10 Zeichen werden alle gleich sein und das 11. wird . (und daher gibt es keine Dateien, die nicht dieses Muster passen), dann

Verwenden Sie den Schalter /a-d, um Verzeichnisnamen zu deaktivieren, falls sie vorhanden sind.

  • zählen Sie sie als einen kostenlosen Bonus.
+0

Ich weiß, meine Frage fehlte einige Informationen (ich machte Bearbeitungen). Die Anzahl der Dateien ist unbekannt. Alle Dateien haben jedoch die gleichen ersten 10 Zeichen. Was ich benötigen würde, ist ein .bat-Skript, um einfach die letzten 12 Zeichen zu beschneiden, wobei meine Variable = B06XTJ8RX3 in diesem Beispiel bleibt. – Garrett

+0

schön - dieses letzte Bit funktioniert. Wenn Sie eine Minute haben, würden Sie erklären, wie die Variable% name% funktioniert? Ist es eine Standardvariable? – Garrett

+0

'name' ist kein magischer Variablenname - es könnte' zphhrodh6d' sein, wenn das in Ihrer Anwendung einen Sinn ergibt.'dir' liefert eine Liste der Dateinamen in'/b' (Grundform) - benennen Sie nur '/ a-d' ohne Verzeichnisnamen. 'FOR/f' analysiert die Liste,' tokens = 1' liefert das erste Token an '%% A' (die spezifizierte * Metavariable * (Tokens = 1 ist der Standardwert und ist redundant) und' delims = .' bedeutet, dass der Linien werden mit '.' gekennzeichnet, sodass der benötigte Teil der Zeile (bis zum Punkt) in' %% A' landet.Dies wird dann in eine Benutzervariable (Name irrelevant) gesetzt, wo die Anführungszeichen abgrenzen die zugewiesene Zeichenkette – Magoo