Czy ktoś może mi powiedzieć, jak wykonać następujące czynności w skrypcie wsadowym systemu Windows? ( *.bat
):
- Utwórz folder tylko wtedy, gdy jeszcze nie istnieje
Bardziej szczegółowo chcę utworzyć folder o nazwie VTS
na C:\
dysku, ale tylko wtedy, gdy ten folder jeszcze nie istnieje. Nie chcę nadpisywać zawartości folderu, jeśli już istnieje i partia jest wykonywana.
windows
batch-file
cmd
Rachunek
źródło
źródło
if not exist "%Folder%" mkdir "%New-Folder%"
Odpowiedzi:
Po prostu użyj tego:
if not exist "C:\VTS\" mkdir C:\VTS
utworzy katalog tylko wtedy, gdy folder nie istnieje.Należy pamiętać, że ten test istnienia zwróci wartość true tylko wtedy, gdy VTS istnieje i jest katalogiem. Jeśli nie ma go lub istnieje jako plik, uruchomi się polecenie mkdir, które powinno spowodować błąd. Możesz sprawdzić, czy VTS istnieje również jako plik.
źródło
NUL
.if exist "a" if not exist "a\" (echo "it's a file") else (echo "it's a dir")
. Jeśli chodzi o twoje ostatnie zdanie, podejrzewam, że coś jest nie tak z plikiem wsadowym w innym miejscu.Zobacz także https://support.microsoft.com/en-us/kb/65994
(Aktualizacja z 7 marca 2018 r .; artykuł Microsoft nie działa, archiwum na https://web.archive.org/web/20150609092521/https://support.microsoft.com/en-us/kb/65994 )
źródło
NUL
jest z jednym L.Po prostu zadzwoń
mkdir C:\VTS
bez względu na wszystko. Po prostu zgłosi, że podkatalog już istnieje.Edycja: jak zauważyli inni, ustawia% ERRORLEVEL%, jeśli folder już istnieje. Jeśli twoja partia (lub jakikolwiek proces ją nazywający) nie dba o poziom błędu, ta metoda działa dobrze. Ponieważ w pytaniu nie wspomniano o unikaniu poziomu błędu, ta odpowiedź jest całkowicie poprawna. Spełnia potrzeby tworzenia folderu, jeśli nie istnieje, i nie zastępuje zawartości istniejącego folderu. W przeciwnym razie podążaj za odpowiedzią Martina Schapendonka .
źródło
utwórz folder o nazwie
VTS
i wyślij goA subdirectory or file TEST already exists
doNUL
.lub
zmień literę dysku na
C:
,mkdir
błąd wyjściowy naNUL
i uruchom następną komendę.źródło
NUL
jako plik wyjściowy.źródło
log
. To subtelna różnica, ale doprowadzi do trudnych do znalezienia błędów w twoich skryptach.Używam w ten sposób, powinieneś umieścić odwrotny ukośnik na końcu nazwy katalogu, aby uniknąć tego miejsca w pliku bez rozszerzenia o tej samej nazwie, co określony katalog, nigdy nie używaj „C: \ VTS”, ponieważ może to plik istnieje z nazwą „VTS” zapisaną na partycji „C:” , poprawnym sposobem jest użycie „C: \ VTS \” , sprawdź ukośnik odwrotny po VTS , więc jest to właściwy sposób.
źródło
!errorlevel!
, tj. Opóźnionej ekspansji. W przeciwnym razie zmiennaERRORLEVEL
byłaby analizowana przed wprowadzeniem pierwszejif
(tj. W czasie analizy). Teraz jest analizowany w czasie wykonywania, dzięki czemu może przechwycić wynikmkdir
. Masz również rację, nawet jeśli testujesz na istnienie, powinieneś nadal testować na sukces (pomyśl: na przykład błąd odmowy dostępu). Bardzo dobre rozwiązanie w porównaniu do innych, +10 !!!Możesz użyć:
Możesz także rozwinąć kod, aby zastąpić brakujące oczekiwane pliki.
źródło
stworzyłem to dla mojego skryptu, którego używam w mojej pracy dla oka.
źródło