2014-09-18 2 views
0

Мне нужно указать пользователю имя файла, а затем проверить, есть ли три типа файлов (.shp, .shx, .dbf) этого имени, а также проверить дополнительный четвертый (.prj)Несколько операторов if в пакетном файле

@echo off 


set /p basename = Enter a file name: 

if exist %basename%.shp (
    if exist %basename%.shx (
     if exist %basename%.dbf (
      if exist %basename%.prj (
      echo %basename% is a complete shapefile. 
      ) else (echo %basname% is an acceptable shapefile.) 
      ) 
      ) 
      ) else (echo shapefile is incomplete) 

Простите мой синтаксис мусора/форматирование, но все, что я пройти в возвращений «шейпфайл неполна».

+1

Вы пытались отделить каждый из этих 'IF' от сеанса командной строки и попробовать их индивидуально, чтобы узнать, каковы ваши результаты? Как насчет добавления некоторых выражений 'echo', чтобы узнать, как далеко вы получаете? Является ли базовое имя тем, что вы вводите абсолютный или относительный путь? –

ответ

2

У вас есть несколько проблем.

1) Пространства значительны при определении переменных. Ваш оператор SET/P создал переменную с именем «basename» с конечным пространством в конце. Но ваши операторы IF используют переменную без пробела в имени.

2) Ваше предложение ELSE срабатывает только в том случае, если внешний IF равен FALSE. Если файл .shp существует, но один из других необходимых файлов отсутствует, то не должно быть никакого вывода.

3) Вы должны положить кавычки вокруг полного имени в инструкции IF, на всякий случай, если в названии есть пробелы или ядовитые символы.

Самый простой способ получить правильную логику - использовать временную переменную для записи, если отсутствует один из файлов.

Я бы не использовал кучу отдельных операторов IF. Вместо этого я бы использовал цикл FOR, чтобы сократить и упростить код.

@echo of 
setlocal 
set /p "basename=Enter a file name: " 
set "missing=" 
for %%X in (shp shx dbf) if not exist "%basename%.%%X" set missing=1 
if defined missing (
    echo shapefile is incomplete 
) else if exist "%basename%.prj" (
    echo "%basename%" is a complete shapefile 
) else echo "%basename%" is an acceptable shapefile