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

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

upward 12-03-2014 21:55 2322767

Проверка в каталогах файлов с расширением .tmp
 
Написать пакетный файл, который будет проверять в каталогах, указанных в качестве параметров, наличие файлов с расширением .TMP и удалять их. Если пути поиска не заданы, вывести сообщение. Создать протокол удаляемых файлов.
Вот,что я набросал,но что-то не создается файл protocol.txt,где,что я забыл?
Код:


@echo off
set d=D:\1
If Exist  %file% Goto Loop
:Loop
del /s D:\1\*.tmp
>protocol.txt

Спасибо.

Georgio 12-03-2014 23:21 2322803

Код:

@echo off
chcp 1251>nul

set d=D:\1
set file=*.tmp

del /s "%d%\%file%">protocol.txt
exit /b


Iska 12-03-2014 23:25 2322807

Цитата:

Цитата upward
что я забыл? »

Указать, чей stdout перенаправлять в файл. И ещё кучу всего прочего.

upward 13-03-2014 10:32 2322899

Iska, подскажите,а как организовать обработчик ошибок?
2.12. Протестировать разработанные командные файлы при различных исходных данных: без параметров, при некорректно заданных параметрах, при различном количестве параметров.

Гуллипут 16-03-2014 15:22 2324319

Georgio, насчёт вот этой строчки:
Цитата:

Цитата Georgio
chcp 1251>nul »

Сколько лет я пишу bat-файлы - ни разу необходимости в этой строке не было. Просто создаю их в кодировке ASCII, которую Microsoft зачем-то переименовала в OEM. При этом, когда я пробовал вставить такую строку, это никак не меняло дела, и всё равно, для того, чтобы русский текст выводился не зюками, приходилось создавать файл в ASCII.
Многие рекомендуют эту строку, но я никак не пойму, почему.

Хотя вот сейчас попробовал добавить эту строчку, и, действительно, пришлось перевести в ANSI. Возможно, что раньше я как-то не так проверял. Подумаю, не стоит ли перейти на такой вариант. Но пока меня кодировка ASCII устраивала.

Гуллипут 16-03-2014 15:39 2324339

Код:

@echo off
set pathes=%*

setlocal EnableExtensions
if not defined pathes set /P pathes=Введите список путей, разделённых пробелами:

copy nul protocol.txt

for %%d in (%pathes%) do (
  If Exist  %%d\*.tmp (
    for %%f in (%%d\*.tmp) do (
      del /q "%%f"
      if not exist "%%f" (echo %%f >>protocol.txt ) else (echo не удалось удалить %%f >>protocol.txt)
    )
  )
)

Вот такой вариант должен работать. При этом, если в путь входит пробел, значит, надо заключить этот путь в кавычки.
Пришлось немного повозиться, зато теперь взял на вооружение ещё одну возможность, которую знал, но пока не использовал: if not defined.

Гуллипут 16-03-2014 16:04 2324349

Цитата:

Цитата Georgio
del /s "%d%\%file%">protocol.txt »

А такой вариант я проверил, но, даже если файл занят и не удалился, всё равно выдаётся сообщение, что он удалён.
Хотя не знаю, насколько это важно, поскольку после того, как его освободили, он всё равно удалился. Видимо, NTFS пометила его на удаление при первой возможности.

ShaddyR 16-03-2014 17:59 2324419

Мне тут, походу, скучно было... вот результат:
Код:


@echo off & set dpath=D:\1\
set dext=*.tmp
set msgtop=Протокол очистки папки "%dpath%" от файлов %dext% ( %date% %time% )
set msgbtm=Работа скрипта завершена.
set err1=Указанная папка не существует либо доступ к ней запрещен!
set err2=Файлы указанного типа не обнаружены!
echo %msgtop% &echo. &cd %dpath% || echo %err1% &&echo. &&echo %msgbtm% &&exit 1
echo %msgtop%>%~dp0\protocol.txt &echo. >>%~dp0\protocol.txt &del /s /q "%dpath%\%dext%" >>%~dp0\protocol.txt &findstr ^Удален %~dp0\protocol.txt ||echo %err2% &&echo %err2% >>%~dp0\protocol.txt
echo. &echo. >>%~dp0\protocol.txt &echo %msgbtm% &echo %msgbtm% >>%~dp0\protocol.txt &echo. &set /p prmt=Вывести на экран протокол?[1]
if %prmt%==1 cls &type %~dp0\protocol.txt &pause

Цитата:

Цитата Гуллипут
Видимо, NTFS пометила его на удаление при первой возможности. »

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

Гуллипут 16-03-2014 23:07 2324580

Цитата:

Цитата ShaddyR
файловая система не занимается ничем подобным. Файл был удален родительским процессом - программой, которой был создан. »

Ничего подобного. Я знаю, что говорю: создавал файл для тестирования я сам, сделал его занятым с помощью просмотра в Far Manager, затем прогнал bat-файл, проверил, что tmp-файл не удалился, затем освободил tmp-файл - и он сразу же исчез. Возможно только, что это сделала ОС, а не файловая система. Но я помню, что именно в NTFS была какая-то возможность заказать отложенное удаление занятого файла, поэтому считаю, что это была файловая система.

Iska 17-03-2014 00:31 2324619

Цитата:

Цитата Гуллипут
сделал его занятым с помощью просмотра в Far Manager »

viewer.cpp:
Код:

ViewFile.Open(strFileName, FILE_READ_DATA, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, nullptr, OPEN_EXISTING);

Гуллипут 17-03-2014 08:53 2324689

Цитата:

Цитата Iska
viewer.cpp:
Код:
ViewFile.Open(strFileName, FILE_READ_DATA, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, nullptr, OP »

Ну, мне проще через Far. Тем более, что C++ у меня нет.

Iska 17-03-2014 12:43 2324774

Гуллипут, это и есть — Far Manager, код, реализующий открытие файла для просмотра.

Гуллипут 18-03-2014 22:50 2325431

Цитата:

Цитата Iska
Гуллипут, это и есть — Far Manager, код, реализующий открытие файла для просмотра. »

Да ну ?! А откуда у вас исходный код Far Manager ?

Iska 19-03-2014 00:48 2325487

Цитата:

Цитата Гуллипут
Да ну ?! »

Ну да.

Цитата:

Цитата Гуллипут
А откуда у вас исходный код Far Manager ? »

Я же привёл ссылку. Вот ещё одна: исходный код.


Время: 15:51.

Время: 15:51.
© OSzone.net 2001-