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

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

Автор: king_stiven
Дата сообщения: 13.09.2010 22:06
bomzzz

Цитата:
for /F "delims=" %%I in ('dir /A:-D /B') do (
if exist "%%I" (

бессмыслено, так как %%I всегда exist


Цитата:
if exist "%%~nI" (


Цитата:
REN "%%~nI-%%~xI" "%%~nI"


как можно переименовать, если папка (файл) уже существует?


Цитата:
if exist "%%~nI" (
MD "%%~nI-%%~xI"
MOVE "%%I" "%%~nI-%%~xI"
if exist "%%I.txt" MOVE "%%I.txt" "%%~nI-%%~xI"
REN "%%~nI-%%~xI" "%%~nI"


мутно, проверяй
Вот так проверяют каталоги
if exist "%%I\"

А так и каталоги и файлы
if exist "%%I"
Автор: bomzzz
Дата сообщения: 13.09.2010 22:08
не бессмыслено. потому что %%I не всегда exist
можно
и так проверяются

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

Добавлено:
когда батник доедет до команды ФОР, он получит список ДИР и потом будет разбирать уже готовый список, при разборе очередного файла из списка, он переместит в вновь созданную папку файл его описания, который тоже находится в уже полученном списке скорее всего сразу за файлом который описывает, и если в начале цикла не поставить проверку на существование файлов из ранее полученного списка, то батник создаст не нужную папку для файла описания, которая потом останется пустой потому, что в неё уже двигать будет нечего.

переименовывать нужно для случая когда файл не имеет расширения, в этом случае нельзя создать папку с именем файла, потому что они будут равны. для этого в конец имени файла добавляется знак дефиса, файл перемещается в него, а потом дефис убирается переименованием.
Автор: faithful
Дата сообщения: 13.09.2010 22:25
bomzzz

Цитата:
не бессмыслено. потому что %%I не всегда exist

Может я чего не понимаю в работе команды dir, но если последняя что-то выдала, то оно таки да всегда exist.
Автор: bomzzz
Дата сообщения: 13.09.2010 22:27
faithful

см выше

Добавлено:
king_stiven
а вот насчет слешей ты прав, в случае наличия в папке двух файлов без расширения
имя-
имя
они стирались а так хоть и не рапихиваются но хоть не стираются
Автор: bomzzz
Дата сообщения: 14.09.2010 01:57
придумал как использовать эту фигню с пробелом в начале имени
даже если приключиться такой удивительный случай как то
" 111111"
"111111"
то он сложит в одну папку. с трудом нашел сервер позволяющий такие имена


Цитата:

@ECHO OFF
COLOR 9F
CLS
CHCP 1251
CD /D "C:\TEMP"


for /F "delims=" %%I in ('dir /A:-D /B') do (
if exist "%%I" (
if exist "%%~nI" (

REM if exist " %%~nI\" REN " %%~nI\" " %%~nI"

MD " %%~nI"
MOVE "%%I" " %%~nI\"
if exist "%%I.txt" MOVE "%%I.txt" " %%~nI\"
REN " %%~nI\" "%%~nI%%~xI"

) else (
MD "%%~nI"
MOVE "%%I" "%%~nI"
if exist "%%I.txt" MOVE "%%I.txt" "%%~nI"

)
)
)
PAUSE
Автор: king_stiven
Дата сообщения: 14.09.2010 06:22
bomzzz

Цитата:
у меня только счетчик не получилось сделать

bomzzz
for /F "delims=" %%I in ('dir /A:-D /B') do (
set "h=%%I"
set /a number+=1
call :yu
)
pause
:yu
echo %number%
echo %h%

Добавлено:
и задачи формулируй чётче, как в школе за 5 класс.
Дано: в папке имеются файлы вида:
"a"
"b"
"c"
...
Нужно:
...

Добавлено:
for /F "delims=" %%I in ('dir /A:-D /B') do if not exist "%%I" echo file %%I not exist
проверяй
Автор: bomzzz
Дата сообщения: 14.09.2010 08:55
http://forum.ru-board.com/topic.cgi?forum=62&topic=21297&start=200#20
да куда уж четче

Добавлено:
счетчик почти что надо, только он не файлы должен считать а файлы с одинаковыми именами и разными расширениями
Автор: Alloran
Дата сообщения: 14.09.2010 09:24
Доброго времени суток.

Подскажите, как можно удалить ветку в реестре для каждого локального пользователя в HKCU. Важно, чтобы обрабатывалось моментально, а не при следующем логине пользователя (т.е. решения связанные с GPO не подходят)
Форум бегло прогуглил, ничего похожего не нашел(
Автор: bomzzz
Дата сообщения: 14.09.2010 09:29
Alloran
@ECHO OFF
COLOR 9F
CLS
reg delete /?
pause
Автор: Alloran
Дата сообщения: 14.09.2010 09:52
bomzzz
Спасибо, конечно, но задача немного сложнее)

Нужно удалять ключи в HKCU _другого_ пользователя.
reg load не подойдет, ибо оно не позволяет подключить куст, если его владелец залогинен и файл используется..

Или, как вариант, нуден способ запускать батники в терминальной сессии другого пользователя)

В общем, нужно решение для экстренного снесения одним пользователем записей о базах 1с 7.7 для всех остальных юзеров..
Автор: res2001
Дата сообщения: 14.09.2010 10:05
Народ!
Че-та у меня if exist "путь с пробелами\nul" не отрабатывает. Если вместо nul воткнуть имя файла - работает.
Это только у меня так?
Проверьте, плз., кому не влом.
Автор: Free_Soft
Дата сообщения: 14.09.2010 10:08
res2001
а что от этой операции требуется?
Автор: res2001
Дата сообщения: 14.09.2010 10:11
ну как что - проверить существование каталога с длинным именем содержащим пробелы

Добавлено:
Собственно говоря, даже короткое имя каталога без пробелов выдает не правильный результат, если записано в кавычках. Убираешь кавычки - ок.
Автор: Free_Soft
Дата сообщения: 14.09.2010 10:14
res2001
ну а при чем тут nul?

Код: if exist "путь с пробелами, включая имя файла"
Автор: res2001
Дата сообщения: 14.09.2010 10:16
Важно использование именно с кавычками, поскольку каталоги с длинными именами, в т.ч. и с пробелами имеются.
Если кавычки убрать, то вообще не проверяет, что вполне естественно.

Добавлено:
Free_Soft

Цитата:
ну а при чем тут nul?

Это из справки винды по команде if цитата:

Цитата:
Команда if не может быть использована непосредственно для проверки существования каталога, но в каждом каталоге существует устройство (NUL). Следовательно, существование каталога может быть проверено, как показано ниже. В следующем примере проверяется наличие каталога:

if exist c:mydir\nul goto process


Добавлено:
Имя файла включать не надо, каталоги могут быть пустыми, необходимо проверить именно наличие каталога.
Автор: bomzzz
Дата сообщения: 14.09.2010 10:21
res2001
че так что ли надо, а не так
if exist mydir\nul
if exist mydir\

Добавлено:
работает и так if exist mydir
Автор: wolf0425
Дата сообщения: 14.09.2010 10:27

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

что-то мне кажется, что уже запущенной 1С совершенно пофигу снос настроек в регистри, а вот у следующей 1С отобрать настройки можно попробовать.
Автор: Free_Soft
Дата сообщения: 14.09.2010 10:27
даа... надо чаще справки читать))
первый раз про nul в этом контексте услышал. Но прекрасно работает и без него, как с указанием имени файла, так и с указанием имени каталога
Автор: res2001
Дата сообщения: 14.09.2010 10:28
bomzzz

Цитата:
че так что ли надо, а не так
if exist mydir\nul
if exist mydir\

Судя по документации надо с nulом.


Цитата:
работает и так if exist mydir

Действительно работает.
Чудеса. Но ведь не работало же.
Опять же в доке винды про nul говорится. Да я и сам все время с nulом делал проверку существования каталогов.
Может пропатчили что-нить.
Автор: bomzzz
Дата сообщения: 14.09.2010 10:28
Free_Soft
if exist mydir\
if exist mydir
так можно отличить каталог от файла
Автор: wolf0425
Дата сообщения: 14.09.2010 10:35

Цитата:
работает и так if exist mydir
Действительно работает.
Чудеса. Но ведь не работало же.
работало. только этот вариант срабатывает и на файл mydir

ещё вариант: dir /a:d "my dir" >nul 2>nul && echo exist!
Автор: sergioser
Дата сообщения: 14.09.2010 10:38
bomzzz

Цитата:
sergioser
типа такого
FOR /F %%I IN ('TYPE MY.TXT ^| FIND "мас адрецк"') do echo %%I

спасибо.
а если надо наоборот выполнить команду если определенного мака в файлике не найдено?
то-есть файлик содержит список маков
надо его проанализировать, если заданого мака в файле нет, выполнить команду (в моем случае blatom почту отослать)
извините если тупой вопрос, просто не могу собрать ответ из примеров.
Автор: bomzzz
Дата сообщения: 14.09.2010 10:39
sergioser

if else
Автор: res2001
Дата сообщения: 14.09.2010 10:44
bomzzz
Мой вариант скрипта разбора файлов еще интересует?
Я довел до ума работу с длинными файлами и добавил отдельную обработку txt
Автор: wolf0425
Дата сообщения: 14.09.2010 10:46
sergioser
TYPE MY.TXT | FIND /v "мас адрецк" && echo not found
Автор: bomzzz
Дата сообщения: 14.09.2010 10:50
res2001
конечно
Автор: res2001
Дата сообщения: 14.09.2010 10:53
bomzzz

Код: @echo off
setlocal enabledelayedexpansion
set "indir=c:\2\"
set "outdir=c:\1\"
rem обрабатываем все кроме файлов *.txt
call :work ".txt"
rem обрабатываем .txt
call :work ".txt.txt"
exit

:work
for /f "tokens=*" %%a in ('DIR /A-D /B /O:N %indir% ^| find /v "%~1" ') do (
call :getdirname "%%~na"
md "%outdir%!getdirname!"
move "%indir%%%a" "%outdir%!getdirname!\"
2>nul move "%indir%%%a.txt" "%outdir%!getdirname!\"
)
exit /b

rem Имя каталога в переменной !getdirname!
:getdirname
if "%2" equ "" (set "fnum=0" & set "getdirname=%~1") else (set "fnum=%2" & set "getdirname=%~1-%2")
if exist "%outdir%%getdirname%\" (
set /a "fnum+=1"
call :getdirname "%~1" !fnum!
) else set "fnum="
exit /b
Автор: bomzzz
Дата сообщения: 14.09.2010 10:57
res2001
файлы описаний не сортирует

Добавлено:
счетчик работает

Добавлено:
и теепрь работает отуда угодно а не только из корня

Добавлено:
файлы без расширений обрабатывает

Добавлено:
http://forum.ru-board.com/topic.cgi?forum=62&topic=21297&start=260#16
я свой до такого состояния довел. как счетчик организовать все так и не врублюсь, понял что подпрограммой, но чета туплю

Добавлено:
ээээ верни назад этот вообще не работает
Автор: res2001
Дата сообщения: 14.09.2010 11:10
bomzzz

Цитата:
ээээ верни назад этот вообще не работает

опять поправил
Автор: bomzzz
Дата сообщения: 14.09.2010 11:12
заработало!

Добавлено:
вот из за счетчика в именах недопустимы восклицательные знаки, вернее из за сетенабле локал. без него все знаки включая процентики обрабатывает в именах нормлаьно. нельзя так воткнуть сюда ендлокал, чтоб все таки восклицательные знаки глотало???

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Windows 7 Starter


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