2016-07-19 12 views
1

Ich habe etwa 2000 JPG-Dateien in einem Ordner, und ich muss einen Ordner für jeden von ihnen mit dem gleichen Namen machen. Das JPG muss nicht unbedingt im selben Ordner sein. Ich bin neu im Batch-Skript, aber es schien wie eine ziemlich einfache Operation. Dies ist, was ich bisher habe:Erstellen von Verzeichnissen im Windows-Batch-Skript

for %%i in (*) do md %%i 

Wenn ich es ausführen, heißt es, ein Unterverzeichnis oder eine Datei existiert bereits. Wie kann ich ein Verzeichnis erstellen, obwohl bereits eine Datei mit demselben Namen existiert?

Auch scheint es, nur für die letzten hundert Dateien zu loopen. Wie bekomme ich es für alle ~ 2000 laufen?

+0

Sie können nicht eine Datei und ein Verzeichnis mit dem gleichen Namen an der gleichen Stelle haben, das ist einfach nicht in Windows möglich! Angenommen, es gibt eine Datei 'image01.jpg', sollte das zugehörige Verzeichnis' image01' heißen (kein '.jpg' Suffix)? – aschipfl

+0

'do MD %% ~ dpi' Siehe Ende der Hilfe für' for /? '. –

+0

@aschipfl, du hast Recht! Ich möchte nicht das Suffix .jpg auf dem Verzeichnisnamen. – ldpelegr

Antwort

0

Sie können so etwas versuchen:

@echo off 
set "ext=*.jpg" 
for %%i in ("%ext%") do ( 
    if not exist "%%~ni" MD "%%~ni" 
) 
pause 

Bearbeiten auf 20/07/2016 @ 20: 25

Aufruf

for /? 

in der Befehlszeile gibt Hilfe zu dieser Syntax (die auch außerhalb von FOR verwendet werden kann, ist hier genau der Ort, an dem Hilfe gefunden werden kann).

Zusätzlich wurde die Substitution von FOR Variablenreferenzen verbessert. Sie können nun die folgenden optionalen Syntax:

%~I   - expands %I removing any surrounding quotes (") 
%~fI  - expands %I to a fully qualified path name 
%~dI  - expands %I to a drive letter only 
%~pI  - expands %I to a path only 
%~nI  - expands %I to a file name only 
%~xI  - expands %I to a file extension only 
%~sI  - expanded path contains short names only 
%~aI  - expands %I to file attributes of file 
%~tI  - expands %I to date/time of file 
%~zI  - expands %I to size of file 
%~$PATH:I - searches the directories listed in the PATH 
       environment variable and expands %I to the 
       fully qualified name of the first one found. 
       If the environment variable name is not 
       defined or the file is not found by the 
       search, then this modifier expands to the 
       empty string 

Die Modifikatoren kombiniert werden können Verbindung Ergebnisse zu erhalten:

%~dpI  - expands %I to a drive letter and path only 
%~nxI  - expands %I to a file name and extension only 
%~fsI  - expands %I to a full path name with short names only 
%~dp$PATH:I - searches the directories listed in the PATH 
       environment variable for %I and expands to the 
       drive letter and path of the first one found. 
%~ftzaI  - expands %I to a DIR like output line 

in den obigen Beispielen% I und PATH durch andere ersetzt werden gültige Werte. Die% ~ Syntax wird durch einen gültigen Variablennamen FOR beendet. Kommissionierung Großbuchstaben Variablennamen wie% I macht es mehr lesbar und vermeidet Verwechslungen mit den Modifikatoren, die nicht empfindlich sind.

Es gibt verschiedene Buchstaben, die Sie wie f für „vollständigen Pfadnamen“ verwenden können, d für Laufwerksbuchstabe, p für Weg, und sie können miteinander kombiniert werden. %~ ist der Anfang für jede dieser Sequenzen und eine Nummer I bedeutet, es funktioniert auf den Parameter %I (wobei %0 der vollständige Name der Batch-Datei ist, genau wie Sie angenommen haben).

+0

Das hat genau so funktioniert, wie ich es gebraucht habe! Vielen Dank. Kannst du mir erklären, was '%% ~ ni' macht? – ldpelegr

+0

@Idpelegr Überprüfen Sie meine Bearbeitung, um zu verstehen, was '%% ~ ni' ist und vergessen Sie nicht, diese Antwort zu akzeptieren, wenn Sie es hilfreich fanden! Viel Glück ! – Hackoo

Verwandte Themen