Перевірка наявності папки за допомогою файлу .bat [закрито]


160

Я хотів би мати можливість перевірити, чи існує певна папка (FolderA), і якщо так, то чи відображається повідомлення, а потім пакетний файл, який потрібно вийти.

Якщо FolderA не існує, я хотів би перевірити, чи існує інша папка (FolderB). Якщо FolderB не існує, слід відобразити повідомлення та створити папку, а якщо FolderB існує, повинно відображатися повідомлення, яке говорить так.

Хтось має уявлення про код, який я міг би просто використати в блокноті, щоб створити пакетний файл, який дозволив би мені це зробити?

Все це потрібно зробити в одному .batфайлі.


7
Пошук у Google пропонує тестування, чи існує Диск або Каталог . І це саме пояснює, як робити те, про що ви просите ...
NealB

2
Шукайте "каталог пакетних файлів існує" тут, знайдений так, Пакетний файл Windows Шукайте каталог, якщо його немає, створіть, тоді перемістіть файл , який показує, як бачити, чи існує каталог чи ні. Тут також розміщені публікації про створення каталогу з пакетного файлу. Будь ласка, пройдіть кілька основних досліджень, перш ніж надсилати нові запитання; швидше за все, питання тут було задано раніше. Дякую.
Кен Уайт

3
Пакет Windows - це мова програмування, перевірте, чи існує файл - завдання програмування. З'являється за темою.
Аудрій Меськаускас

1

Відповіді:


259

Спробуйте скористатися цим:

IF EXIST yourfilename (
echo Yes 
) ELSE (
echo No
)

Замініть своє ім’я файлу з ім'ям файлу.

Щоб переглянути каталог, ознайомтеся з цим https://jeffpar.github.io/kbarchive/kb/065/Q65994/

C:
IF NOT EXIST C:\WIN\ GOTO NOWINDIR
CD \WIN
:NOWINDIR

для зворотного косого сліду ('\'), здається, достатньо, щоб розрізняти каталоги та звичайні файли.


2
Друга частина вашої відповіді неповна.
tmj

4
if exist "c:\folder\nul" echo okне працював для мене під Windows 7. Те, що працювало, було if exist "c:\folder\" echo ok.
Олександр Гельбух

2
@AlexanderGelbukh - Ви праві, if exist "networkPath\nul"можете помилково повідомити про файл як папку на мережевих накопичувачах Windows. На жаль, if exist "networkPath\"страждає та ж проблема. Дивіться оновлення 2015-12-08 в stackoverflow.com/a/8669636/1012053 для техніки , яка була надійним в усіх моїх тестах.
dbenham

@AlexanderGelbukh Це працює без лапок. Звичайно, це обмежує вас, коли мова йде про пробіли в шляху до каталогу.
Марк.2377

1
Так, без лапок це працює. Однак з цитатами це не працює навіть для локальних дисків: if exist c:\Windows\nul echo okкаже ok, але if exist "c:\Windows\nul" echo okнічого не каже. Як я вже казав, хоча if exist "c:\Program Files\nul" echo okнічого не if exist "c:\Program Files\" echo okговорить , але каже, okі таким чином працює навіть для шляху з пробілами.
Олександр Гельбух

34

Я думаю, що відповідь є тут (можливо, дублікат):

Як перевірити, чи файл - це каталог у пакетному сценарії?

IF EXIST %VAR%\NUL ECHO It's a directory

Замініть% VAR% своїм каталогом. Будь ласка, прочитайте оригінальну відповідь, оскільки містить інформацію про обробку пробілів у назві папки.

Як зазначає foxidrive, це може бути недостатньо надійним для вікон класу NT. Це працює для мене, але я знаю, що він має деякі обмеження (які ви можете знайти у посиланому запитанні)

if exist "c:\folder\" echo folder exists 

повинно вистачити для сучасних вікон.


6
Техніка \ nul не є надійною у вікнах класу NT. Однак це було чудово в MSDOS та Win9x. Рішення в сучасних Windows просто if exist "c\:folder\" echo folder exists
foxidrive

1
Я думаю, що це також зазначено у посиланні.
Cosmin Vană

Все-таки не розумію, чому я поступив з позиції (що означає "Не корисно"). Я додав посилання на питання, де відповіді охоплюють необхідний сценарій.
Cosmin Vană

Не може бути корисним, оскільки це не застосовується до сучасних машин, і ваша попередня відповідь не робила жодних відмінностей. Деякі люди все одно будуть відповідати на вашу відповідь, оскільки вона не відповідає на поставлене запитання.
foxidrive

2
від support.microsoft.com/kb/65994 "NUL завжди існує на локальному накопичувачі MS-DOS FAT" - як уE:\NUL
CAD блокується
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.