Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 10

Автор: bobojon
Дата сообщения: 21.06.2011 16:56
Elroir
попробовал Ваш код. То, что и надо!
Спасибо ВСЕМ ОГРОМНОЕ!!!!
Автор: AnGo
Дата сообщения: 21.06.2011 17:32
И снова вопрос.
В батнике есть строка вида:

Код:
for /R %SOURCEDISK%\ %%N in ("*.crm") do (
echo %%N
)
Автор: Elroir
Дата сообщения: 21.06.2011 17:34
Engraf

Цитата:
А возможно ли батником или, на худой конец, vbs-ником удалить файлы в корзину?

Из командной строки можно удалить в корзину (без использования vbs) только с помощью сторонних утилит. Например, можно использовать recycle.exe из пакета CmdUtills.

AnGo
Можно так:

Код:
for /f "tokens=*" %%a in ('dir /b /s %SOURCEDISK%\A*.crm ^| findstr "\.crm\>"') do echo %%a
Автор: wolf0425
Дата сообщения: 21.06.2011 18:01

Цитата:
AnGo
Можно так:
а твой код точно правильно работает?

Код: for /f "tokens=*" %%a in ('dir /b /s /a-d "%SOURCEDISK%\a*.crm" ^| findstr /e /c:".crm"') do echo %%a
Автор: AnGo
Дата сообщения: 21.06.2011 18:40
Elroir
wolf0425
1. Оба кода находят ровно по одному файлу, хотя в десятке нижележащих поддиректорий их как минимум по одному. Т.е. должно быть файлов > 1
2. Оба находят один и тот же файл, который называется "Копия apa.crm".
Автор: ASE_DAG
Дата сообщения: 21.06.2011 19:06
AnGo
А я вам еще интереснее вещь скажу.
Не подтверждаю поведение при котором *.crm раскрывается эквивалентно *.crm*.


X:\>for /R \test\ %N in ("*.crm") do (echo %N)

X:\>(echo X:\test\bar.crm )
X:\test\bar.crm

X:\>(echo X:\test\subdir\ququ.crm )
X:\test\subdir\ququ.crm


при том, что

X:\>for /R \test\ %N in ("*") do (echo %N)

X:\>(echo X:\test\foo.crmz )
X:\test\foo.crmz

X:\>(echo X:\test\bar.crm )
X:\test\bar.crm

X:\>(echo X:\test\test.bat )
X:\test\test.bat

X:\>(echo X:\test\subdir\ququ.crm2 )
X:\test\subdir\ququ.crm2

X:\>(echo X:\test\subdir\ququ.crm )
X:\test\subdir\ququ.crm


X:\>cmd /version
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.
Автор: 01MDM
Дата сообщения: 21.06.2011 19:07
AnGo
Попробуй добавить ключик /a к dir. Возможно файлы в скрытых папках.
Автор: Engraf
Дата сообщения: 21.06.2011 20:31
Elroir
Спасибо, подойдет
Автор: Elroir
Дата сообщения: 21.06.2011 21:41
wolf0425

Цитата:
а твой код точно правильно работает?

Я проверял - на Windows 7 Enterprise English - работает. Естественно я не пробовал все варианты.

AnGo
Чтобы понять, что происходит - покажи структуру папок и находящиеся в них .crm файлы (включая те, которые не находятся поиском).
Чуть-чуть изменю свой код:

Код:
for /f "tokens=*" %%a in ('dir /b /s /a %SOURCEDISK%\A*.crm ^| findstr "\<A.*\.crm\>"') do echo %%a
Автор: wolf0425
Дата сообщения: 21.06.2011 22:29

Цитата:
AnGo
А я вам еще интереснее вещь скажу.
Не подтверждаю поведение при котором *.crm раскрывается эквивалентно *.crm*.

разве?
for %n in ("*.crm") do (echo %n )
(echo foo.crmz )
foo.crmz


Добавлено:
Elroir
Цитата:
Я проверял - на Windows 7 Enterprise English - работает. Естественно я не пробовал все варианты.
ну так попробуй с файлом "foo.crm foo.crmz"
понятно что реально такого файла наверно не случится - но это не повод небрежно писать регэкспы.
в твоем варианте там должно быть findstr "\.crm$"


AnGo

Цитата:
1. Оба кода находят ровно по одному файлу, хотя в десятке нижележащих поддиректорий их как минимум по одному.

угу, ключик /a-d наверняка не помешает у dir
Автор: AnGo
Дата сообщения: 22.06.2011 04:17
01MDM
Нет, папки не скрытые и не системные.
wolf0425

Цитата:
угу, ключик /a-d наверняка не помешает у dir

Угу, но и не поможет.
Структура папок и файлов

Код:
E:\testpath\testfolder
foldercrm1
AAKRB1.CRM
AAKRB2.CRM
AAKRB.CRM
AAKRB.CRM2
AAKRB.txt
Копия AAKRB.CRM
AAKRB.BAK
BAKRB.CRM
CAKRB.CRM
foldercrm2
.
.
.
.
foldercrmN

Автор: 01MDM
Дата сообщения: 22.06.2011 05:45
AnGo

Код:
findstr /i /e "\\a[^\\]*\.crm"
Автор: AnGo
Дата сообщения: 22.06.2011 07:55
01MDM
Замена на твой код части кода привело к успешному выполнению задачи.
Большое спасибо!
Автор: sdaww
Дата сообщения: 22.06.2011 08:33
for /f "skip=3" %%i in (E:\backup.log) do (echo %%i)

Выполнение этого кода в Windows XP SP3 приводит к ошибке:

Непредвиденное появление: %%i

В Windows Server 2003 SP2 код выполняется без проблем.

Подскажите пожалуйста что делать, где копать?
Автор: res2001
Дата сообщения: 22.06.2011 08:44
sdaww
Нормальный код.
Ошибка может возникнуть, если ты его выполняешь не из бат файла, а непосредственно в ком.строке.

Добавлено:
В ком.строке надо по одному знаку % указывать, а не 2.
Автор: sdaww
Дата сообщения: 22.06.2011 09:16
res2001
Понял. Спасибо
Автор: Elroir
Дата сообщения: 22.06.2011 09:34
wolf0425

Цитата:
ну так попробуй с файлом "foo.crm foo.crmz"
понятно что реально такого файла наверно не случится - но это не повод небрежно писать регэкспы.

Для того, чтобы проверить все возможные варианты - нужно написать тесты, прогнать их на различной структуре директорий, с различными файлами, на разных версиях Windows и т.д.
Когда я пишу проект на работе - так и делаю, прежде чем передать его заказчику. Тестинг занимает много времени. Согласись, что здесь это неприемлимо.
А в моем коде бОльшая проблема была в том, что я не использовал ключ /i.
Автор: p3west
Дата сообщения: 22.06.2011 12:20

Цитата:
Цитата:Предположим я новичок и не знаю как что и где прописывать и ваших терминов тоже не понимаю



Цитата:
wolf0425


Цитата:
тогда тебе надо почитать что-то, чтоб понимать что тебе отвечают.


Вот Вы странный,а с чего вы взяли что я не читал?...Вы не делайте выводы о человеке,а просто помогите написать батник. Вам сложно выложить образец действующего батника?А я уж разберусь. Или Вы предпочитаете отписывать по поводу меня?...
Автор: king_stiven
Дата сообщения: 22.06.2011 12:47
p3west
В блоге экслера есть мануал как архивировать батником. Нажми в этом посте на
Редактировать

Автор: wolf0425
Дата сообщения: 22.06.2011 12:55

Цитата:
Вам сложно выложить образец действующего батника?
вам его выложили несколько раз, ровно под ту общую постановку, под которую вы просили.
Если вы этого до сих пор не понимаете - значит читали вы что-то совершенно не по теме.
Автор: p3west
Дата сообщения: 22.06.2011 12:59

Цитата:
В блоге экслера есть мануал как архивировать батником


Спасибо
Автор: king_stiven
Дата сообщения: 22.06.2011 13:04
AnGo
есчо вариант
for /R %%N in ("*.crm") do if "%%~xN"==".crm" echo %%N
Автор: p3west
Дата сообщения: 22.06.2011 13:05

Цитата:
вам его выложили несколько раз, ровно под ту общую постановку, под которую вы просили.
Если вы этого до сих пор не понимаете - значит читали вы что-то совершенно не по теме.

Ну да ну да. Я посмотрел бы на Вашу реакцию при точно таком же ответе Вам в интересующей Вас теме,но при этом Вы бы в ней не понимали. И ответ бы был такой же как и Ваш вопрос...
Автор: AlexanderNON
Дата сообщения: 22.06.2011 13:24
res2001
Есть проблема по коду.
Напомню:
Мне нужно было сделать батник, который удалит из папки все архивы кроме созданных в пятницу.

Вот код:

Цитата:
@set @x=0 /*
@echo off
set "workdir=G:\Bat\1\"

for /f "tokens=*" %%a in ('dir /a:-d /b /s %workdir%*') do (
for /f "tokens=*" %%b in ('cscript.exe //nologo /e:javascript "%~0" %%~ta') do (
if %%b neq 5 echo del /f /q %%a
))

goto:eof */

var args = WScript.Arguments;
var dd = new Date(args(0).substr(6,4),parseInt(args(0).substr(3,2))-1,args(0).substr(0,2));
WScript.echo(dd.getDay());
WScript.quit();


Проблема в том, что такой батник удаляет все файлы из папки.
Может проблема в дате создания/изменения файла? Касперский каждый день проверяет файлы и поэтому в свойствах даты постоянно меняются:

Создан: 22 июня 2011 г., 20:50:09
Изменен: 10 июня 2011 г., 6:20:30
Открыт: 22 июня 2011 г., 20:50:09

Формат даты как положено ДД.ММ.ГГГГ

Проверял на Windows XP и Windows 7

Даже не знаю, в чем проблема...



Автор: wolf0425
Дата сообщения: 22.06.2011 13:44

Цитата:
И ответ бы был такой же как и Ваш вопрос...
какой такой мой вопрос?
от себя я помню описание составляющих для батника под абстрактный архиватор, написанного не мной после того как вы отказались уточнять что же вам нужно, и вполне работающий пример батника под rar, в котором вам нужно было только заменить имена путей и архива на свои.
Ну а также несколько рекомендаций вам сходить и наконец прочитать хэлп своего архиватора и учебник, что вы до сих пор почему-то не сделали.

Автор: p3west
Дата сообщения: 22.06.2011 13:48

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


Спасибо не трудитесь понять меня и себя.Мне все подсказал king_stiven и я сразу все понял и уже написал что мне нужно.
Автор: wolf0425
Дата сообщения: 22.06.2011 13:52

Цитата:
Касперский каждый день проверяет файлы и поэтому в свойствах даты постоянно меняются:
Создан: 22 июня 2011 г., 20:50:09
Изменен: 10 июня 2011 г., 6:20:30
Открыт: 22 июня 2011 г., 20:50:09

Касперский меняет только Открыт:
Создан: это дата, когда файл с таким именем был создан на данном диске (перенос/переименование - её не меняют).
Изменен: - это дата, когда данный файл последний раз изменяли (копирование/перенос/переименование - её не меняют).
то что в процитированном файл создали позже чем изменяли - говорит о том, что файл в папке появился в результате копирования из другой папки.

дата %%~ta которая передается скрипту - это Изменен: , что не соответсвует написанному тобой условию задачи (проверять дату создания, а не модификации).
тебе точно-точно дата создания важна? процитирвоанный файл в пятницу был модифицирован, а создан - сегодня, в среду.


Цитата:
что такой батник удаляет все файлы из папки.
у меня этот код исправно игнорирует файлы, модифицированные в пятницу, например с датой Изменен: 10 июня 2011
Автор: res2001
Дата сообщения: 22.06.2011 14:10
AlexanderNON
Еще раз проверил - нормально работает, выводит файлы с датой изменения не пятница.
Про то что берется дата изменения файла я специально в комментарии к коду озвучил.

Добавлено:
Для проверки: возьми код из батника отвечающий за определение дня недели, сохрани его в файл с расширением js и по запускай с разными датами в параметре.
И посмотри, какой день недели будет выводится. Пятница это 5, воскресенье - 0, и .т.д.

Код: var args = WScript.Arguments;
var dd = new Date(args(0).substr(6,4),parseInt(args(0).substr(3,2))-1,args(0).substr(0,2));
WScript.echo(dd.getDay());
WScript.quit();
Автор: seva_smr
Дата сообщения: 22.06.2011 14:35
Всем добрый день. Интересует следующая, довольно простая как мне кажется, проблема:
Необходимо создавать папку просто с сегодняшней датой.

Если делать так:

Код: SET A=%DATE%
MD C:\%A%
Автор: res2001
Дата сообщения: 22.06.2011 14:41
seva_smr
md c:\%date:~-4%%date:~3,2%%date:~0,2%

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: зависает установка Windows XP: 39 минут


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.