Показать полную графическую версию : Проверка в каталогах файлов с расширением .tmp
Написать пакетный файл, который будет проверять в каталогах, указанных в качестве параметров, наличие файлов с расширением .TMP и удалять их. Если пути поиска не заданы, вывести сообщение. Создать протокол удаляемых файлов.
Вот,что я набросал,но что-то не создается файл protocol.txt,где,что я забыл?
@echo off
set d=D:\1
If Exist %file% Goto Loop
:Loop
del /s D:\1\*.tmp
>protocol.txt
Спасибо.
@echo off
chcp 1251>nul
set d=D:\1
set file=*.tmp
del /s "%d%\%file%">protocol.txt
exit /b
что я забыл? »
Указать, чей stdout перенаправлять в файл. И ещё кучу всего прочего.
Iska, подскажите,а как организовать обработчик ошибок?
2.12. Протестировать разработанные командные файлы при различных исходных данных: без параметров, при некорректно заданных параметрах, при различном количестве параметров.
Гуллипут
16-03-2014, 15:22
Georgio, насчёт вот этой строчки: chcp 1251>nul » Сколько лет я пишу bat-файлы - ни разу необходимости в этой строке не было. Просто создаю их в кодировке ASCII, которую Microsoft зачем-то переименовала в OEM. При этом, когда я пробовал вставить такую строку, это никак не меняло дела, и всё равно, для того, чтобы русский текст выводился не зюками, приходилось создавать файл в ASCII.
Многие рекомендуют эту строку, но я никак не пойму, почему.
Хотя вот сейчас попробовал добавить эту строчку, и, действительно, пришлось перевести в ANSI. Возможно, что раньше я как-то не так проверял. Подумаю, не стоит ли перейти на такой вариант. Но пока меня кодировка ASCII устраивала.
Гуллипут
16-03-2014, 15:39
@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
del /s "%d%\%file%">protocol.txt » А такой вариант я проверил, но, даже если файл занят и не удалился, всё равно выдаётся сообщение, что он удалён.
Хотя не знаю, насколько это важно, поскольку после того, как его освободили, он всё равно удалился. Видимо, NTFS пометила его на удаление при первой возможности.
Мне тут, походу, скучно было... вот результат:
@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
файловая система не занимается ничем подобным. Файл был удален родительским процессом - программой, которой был создан. »
Ничего подобного. Я знаю, что говорю: создавал файл для тестирования я сам, сделал его занятым с помощью просмотра в Far Manager, затем прогнал bat-файл, проверил, что tmp-файл не удалился, затем освободил tmp-файл - и он сразу же исчез. Возможно только, что это сделала ОС, а не файловая система. Но я помню, что именно в NTFS была какая-то возможность заказать отложенное удаление занятого файла, поэтому считаю, что это была файловая система.
сделал его занятым с помощью просмотра в Far Manager »
viewer.cpp (http://farmanager.googlecode.com/svn/trunk/unicode_far/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
viewer.cpp:
Код:
ViewFile.Open(strFileName, FILE_READ_DATA, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, nullptr, OP »
Ну, мне проще через Far. Тем более, что C++ у меня нет.
Гуллипут, это и есть — Far Manager, код, реализующий открытие файла для просмотра.
Гуллипут
18-03-2014, 22:50
Гуллипут, это и есть — Far Manager, код, реализующий открытие файла для просмотра. »
Да ну ?! А откуда у вас исходный код Far Manager ?
Да ну ?! »
Ну да.
А откуда у вас исходный код Far Manager ? »
Я же привёл ссылку. Вот ещё одна: исходный код (http://farmanager.com/opensource.php?l=ru).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.