Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проверка создана ли папка (http://forum.oszone.net/showthread.php?t=179001)

dosperados 23-06-2010 18:39 1440309

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

Необходимо в бат файле провести проверку папки на создание т.е. если папка существует то добавить в неё файлы если её нет то создать папку и сделать другие действия, я где-то видел что это легко осуществляется с помощью батника только теперь не могу найти где это я видел... подскажите пож-та...
вроде такая проверка осуществлялась через null но как точно совсем не помню
Заранее спасибо.

megaloman 23-06-2010 19:14 1440330

Код:

@Echo Off

Set Papka=D:\Kuku

If Exist "%Papka%\*.*" Echo Папка %Papka% есть
If Not Exist "%Papka%\*.*" Echo Папки %Papka% нет
pause

или
Код:

@Echo Off

Set Papka=D:\Kuku

If Exist "%Papka%\*.*" (
  Echo Папка %Papka% есть
) Else (
  Echo Папки %Papka% нет
)
pause


dosperados 23-06-2010 20:42 1440370

Цитата:

Цитата megaloman
Код:
@Echo Off
Set Papka=D:\Kuku
If Exist "%Papka%\*.*" Echo Папка %Papka% есть
If Not Exist "%Papka%\*.*" Echo Папки %Papka% нет
pauseили
Код:
@Echo Off
Set Papka=D:\Kuku
If Exist "%Papka%\*.*" (
Echo Папка %Papka% есть
) Else (
Echo Папки %Papka% нет
)
pause »

вот все в этом коде все работает нормально исправил просто не указал одну команду...
Код:

@set dir=d:\rar
@If Exist "%dir%\%computername%" (
  Echo Папка %computername% есть
  goto end
) Else (
  Echo Папки %computername% нет
  Echo создаем папку %computername%
  md %computername%
  exit
)
:end
echo papka est
pause
exit

все сам разобрался и исправил... как я был слеп))) на такая маленькая ошибка

ShaddyR 23-06-2010 21:10 1440389

Цитата:

Цитата dosperados
почемуто exist работает както коряво »

потому, что он проверяет в реализации megaloman то, что ему сказано - наличие файлов в папке, а не наличие самой папки.
В простейшем случае, если путь соответствует требования DOS (нет пробелов, англ. язык, не больше 8-ми символов в имени) можно проверять так:
if exist %papka%\nul

Универсальнее будет так:
cd %papka%>nul
if /i %errorlevel% geo 1 (echo нет
) else (echo есть )

или так
cd %papka%
goto exist%errorlevel%
:exist0
echo есть
exit
:exist1
echo нет
exit

(если тебя не смущает мат на экране в случае невозможности перейти в нужную папку ;))

El Sanchez 23-06-2010 21:11 1440392

Цитата:

Цитата dosperados
Необходимо в бат файле провести проверку папки на создание т.е. если папка существует то добавить в неё файлы если её нет то создать папку и сделать другие действия »

dosperados, для примера, если папка C:\temp не существует, то создать ее и копировать в нее все файлы *.txt из папки C:\source, если существует, то удалить файлы *.txt из папки C:\source:

Код:

@Echo Off
Set Folder=C:\temp
Set Source=C:\source

MD "%Folder%" 2>nul && Del /F /Q  "%Source%\*.txt" || Copy "%Source%\*.txt" "%Folder%" /Y >nul


megaloman 23-06-2010 21:51 1440422

ShaddyR,
Цитата:

потому, что он проверяет в реализации megaloman то, что ему сказано - наличие файлов в папке, а не наличие самой папки
- Вы не вполне правы, проверьте, пожалуйста, мою реализацию, я непроверенные коды не имею привычки размещать где-либо. У меня проверяется наличие папки, даже если там нет файлов. Если по указанному пути есть файл, совпадающий с именем желаемой папки, папка не создастся, мой способ работает. Проверьте, убедитесь. Вот код, который создаёт папку с подпакой по имени компьютера. Я проверил, работает.
Код:

@Echo Off

set dir=d:\rar

If Exist "%dir%\%computername%\*.*" (
    Echo Папка %computername% есть
) Else (
    Echo Папки %computername% нет
    Echo создаем папку %computername%
    md "%dir%\%computername%"
    If Not Exist "%dir%\%computername%\*.*" (
      Echo Не удалось создать папку "%dir%\%computername%"
      Pause
      GoTo EOF
    ) Else (
      Echo Папка %computername% есть
    )
)

rem Далее делаем что нужно
pause

Кстати, если имя папки будет, например, d:\У попа была собака
set dir=d:\У попа была собака
Мой способ работает, если батник набран в 866 кодировке (DOS)
Приведенный код имеет ценность только с той точки зрения, что можно показать, создаётся ли новая папка. На практике, это вообще не нужно. Главное, чтобы папка была. Поэтому код выше можно упростить с точки зрения логики
Код:

@Echo Off

set dir=d:\У попа была собака

rem Создаю папку безо всякой проверки. 
rem Даже если она уже есть, выдастся ошибка, но батник продолжит выполнение

md "%dir%\%computername%" 1>nul 2>nul
If Not Exist "%dir%\%computername%\*.*" (
      Echo Не удалось создать папку "%dir%\%computername%"
      Pause
      GoTo EOF
)

Echo Папка %computername% есть

rem Далее делаем что нужно
pause


ShaddyR 24-06-2010 03:06 1440586

megaloman, я ведь не сказал, что твой вариант не работает (он работает, я проверял). Он не должен работать согласно логики кода, а значит его сработка основана на чем-то третьем, что в определенных случаях может и не сработать.


Время: 16:49.

Время: 16:49.
© OSzone.net 2001-