Компьютерный форум 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=198308)

aggressor_ 01-02-2011 19:47 1602309

Дополнить батник для очистки папки
 
Здравствуйте! Имеется простенький бат файл
Код:

del /S/Q "C:\Program Files\The KMPlayer\Temp"
Хотелось бы его немного изменить:
открывать вначале папку temp, чтобы посмотреть какие файлы и затем задать вопрос об очистки (т.е. что бы появилось окошко с соответствующим вопросом на удаление "да, нет")

amel27 02-02-2011 05:26 1602553

Цитата:

Цитата aggressor_
открывать вначале папку temp, чтобы посмотреть какие файлы и затем задать вопрос об очистки »

не совсем понял, что значит "посмотреть", как вариант:
Код:

@echo off
SETLOCAL EnableExtensions
set "$TMP=C:\Program Files\The KMPlayer\Temp"

PUSHD "%$TMP%"||(pause>nul& GoTo:EOF)
dir/b/a/s|findstr ".">nul||(echo Каталог пуст.&pause>nul&GoTo:EOF)
(echo Содержимое каталога "%$TMP%":
 echo -----------------------------
 dir/b/a/s)|more
:LOOP
set/p YN="Удалить содержимое временного каталога? (Y/N): "
if /i not "%YN%"=="Y" if /i not "%YN%"=="N" GoTo LOOP

if /i "%YN%"=="Y" RD /S/Q "%$TMP%"2>nul&echo Каталог очищен.&pause>nul
POPD& ENDLOCAL


aggressor_ 02-02-2011 16:56 1602931

Немного не так...
Нужно сначала открыть указанную папку (вывести на экран не содержимое папки, а саму папку развернуть на экране), а затем предложить удаление ( без Y/N, чтобы можно было мышкой нажать окей)

p.s. в каком шрифте нужно сохранять?

OSArev 03-02-2011 03:01 1603256

Цитата:

Цитата aggressor_
Нужно сначала открыть указанную папку (вывести на экран не содержимое папки, а саму папку развернуть на экране), а затем предложить удаление ( без Y/N, чтобы можно было мышкой нажать окей) »

Привет...
А на VBS не пойдет? Мне, тоже как-то надо было открыть папку в BAT, но нехватило терпения искать и я так до сих пор не знаю.
А на VBS, пожалуйста:
Код:

Set objShellApp = CreateObject("Shell.Application")
objShellApp.Open("C:\Program Files\The KMPlayer\Temp")
WScript.Sleep 500
result = MsgBox ("ВЫ ДЕЙСТВИТЕЛЬНО ХОТИТЕ УДАЛИТЬ ПАПКУ?", vbYesNo, "Удаление папки.")
Select Case result
 Case vbYes
  Set FSO = CreateObject("Scripting.FileSystemObject")
      FSO.DeleteFolder "C:\Program Files\The KMPlayer\Temp"
  WScript.Quit
  Case vbNo
  WScript.Quit
End Select


amel27 03-02-2011 03:01 1603257

Цитата:

Цитата aggressor_
в каком шрифте нужно сохранять? »

DOS 866
Цитата:

Цитата aggressor_
открыть указанную папку (вывести на экран не содержимое папки, а саму папку развернуть на экране) »

Код:

explorer /root,"C:\Program Files\The KMPlayer\Temp"
Цитата:

Цитата aggressor_
чтобы можно было мышкой нажать окей »

вопрос не совсем в тему - батники для консольных решений, смотрите в сторону WSH/PowerShell/AutoIT

OSArev 03-02-2011 03:06 1603258

Цитата:

Цитата amel27
explorer /root,"C:\Program Files\The KMPlayer\Temp" »

Спасибо.А, мне, как раз тоже это было интересно.А на счёт
Цитата:

Цитата amel27
смотрите в сторону WSH »

я с тобой согласен. Не видел твоего сообщения и написал ответ на VBS.
PS: Послушай amel27, может не к месту, но всё же не подскажешь как из текстового файла прочитать в переменную. Ну, на пример, в тексте написано C:\Program Files\ля_ля\гу_гу
Как вывести переменную, чтобы к примеру скопировать туда файлы. Как, я понимаю, для перехода нужно добавить \ ?

NiOl 04-02-2011 13:30 1604283

Цитата:

Цитата OSArev
как из текстового файла прочитать в переменную. Ну, на пример, в тексте написано C:\Program Files\ля_ля\гу_гу
Как вывести переменную, чтобы к примеру скопировать туда файлы. Как, я понимаю, для перехода нужно добавить \ ? »

for /f
подробнее for /?

yurfed 04-02-2011 14:21 1604328

Цитата:

Цитата amel27
set "$TMP=C:\Program Files\The KMPlayer\Temp" »

В этом не особо силён, но на сколько я понял, на время сеанса, после запуска этого батника, временной папкой становится именно C:\Program Files\The KMPlayer\Temp, что ни есть очень хорошо.
Я правильно мыслю?

El Sanchez 04-02-2011 15:59 1604432

Цитата:

Цитата amel27
explorer /root,"C:\Program Files\The KMPlayer\Temp" »

Еще можно просто
Код:

start "" "C:\Program Files\The KMPlayer\Temp"
, дабы не плодить explorer.exe

Цитата:

Цитата aggressor_
чтобы можно было мышкой нажать окей »

В CMD окей показывает только MSG, наверное:
Код:

msg * /W "Очистить папку?"&&RD /S/Q "C:\Program Files\The KMPlayer\Temp" 2>nul
Цитата:

Цитата yurfed
Я правильно мыслю? »

yurfed, нет. Системной переменной %TMP% в скрипте amel27 нет.

amel27 04-02-2011 16:27 1604451

Цитата:

Цитата El Sanchez
дабы не плодить explorer.exe »

да он вроде сам не плодится... если только не запускать с ключом /separate
к сожалению, ни один из этих способов не поддерживает /WAIT (

NiOl 04-02-2011 16:44 1604464

Цитата:

Цитата amel27
к сожалению, ни один из этих способов не поддерживает /WAIT »

можно добавить MSG с ключем /W

aggressor_ 04-02-2011 23:41 1604819

OSArev,
Код:

Set objShellApp = CreateObject("Shell.Application")
objShellApp.Open("C:\Program Files\The KMPlayer\Temp")
WScript.Sleep 500
result = MsgBox ("ВЫ ДЕЙСТВИТЕЛЬНО ХОТИТЕ УДАЛИТЬ ПАПКУ?", vbYesNo, "Удаление папки.")
Select Case result
 Case vbYes
  Set FSO = CreateObject("Scripting.FileSystemObject")
      FSO.DeleteFolder "C:\Program Files\The KMPlayer\Temp"
  WScript.Quit
  Case vbNo
  WScript.Quit
End Select

А можно подкорректировать, чтобы не папку удалял, а только содержимое?

OSArev 05-02-2011 01:33 1604878

Цитата:

Цитата NiOl
подробнее for /? »

Почитаем, спасибо...

Цитата:

Цитата aggressor_
А можно подкорректировать, чтобы не папку удалял, а только содержимое? »

у amel27: ,здесь есть очень интересный код для очистки папки.
http://forum.oszone.ru/post-1340319.html#post1340319
Подставь свой путь, воткни в исходный VBS, и всё ОК. Не ленись.
PS:amel27: - отдельное спасибо, мне,как раз подобного образца не хватало

aggressor_ 05-02-2011 02:59 1604913

Лень тут совершенно ни причём. Безусловно, если я хоть немного понимал во всём этом, я бы не задавал эти вопросы...
Соединив два скрипта (твой и amel27) методом тыка получилось вот это:
Код:

Set objShellApp = CreateObject("Shell.Application")
objShellApp.Open("C:\123")
WScript.Sleep 500
result = MsgBox ("Вы действительно хотите удалить папку?", vbYesNo, "Удаление папки.")
Select Case result
 Case vbYes

On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFldr = "C:\123"

ClearFolder strFldr

Function ClearFolder(sFldr)
  On Error Resume Next
  Dim oD, cF, cD, oI

  Set oD = objFSO.GetFolder(sFldr)
  Set cF = oD.Files
  Set cD = oD.SubFolders

  For Each oI In cF
      oI.Attributes = 0
      oI.Delete
  Next

  For Each oI In cD
      ClearFolder oI.Path
      oI.Attributes = 0
      oI.Delete
    Next
End Function
WScript.Quit
  Case vbNo
  WScript.Quit
End Select

И самое удивительное, что работает!

OSArev 06-02-2011 02:38 1605677

Я рад, что у тебя получилось.Обращайся...


Время: 06:34.

Время: 06:34.
© OSzone.net 2001-