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

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

Автор: LunQ
Дата сообщения: 12.09.2010 13:58
NIKZZZZ
Пробел есть, только почему-то не передается вообще ничего
Хотя, соврал, передается, только если вместо User русское слово вписать, то не передается.
Автор: NIKZZZZ
Дата сообщения: 12.09.2010 14:05
ComradG

Цитата:
Тоже вариант, но бага в том, что если даже указать delims= , а пробел не во всех сроках после User, то часть из того будет потеряна. Да, кстати, ты не знаешь как без помощи vbs в начало файла строки писать? А то я только и умею оное делать через vbs.

Можно указать несколько разделителей, если User не является отдельным словом (например UserProfile), его несложно обрезать до четырех первых символов.

Для записи в начало можно создать временный файл, после чего склеить его командой "Copy" c модифицируемым.


Добавлено:
LunQ

Цитата:
Пробел есть, только почему-то не передается вообще ничего

Возможно, там не пробел а, например TAB, возможно, там служебные символы.

Приведи кусочек Temp.txt




Добавлено:
LunQ

Цитата:
только если вместо User русское слово вписать, то не передается.

Напиши батник в той кодировке, которая используется в Temp.txt
Автор: LunQ
Дата сообщения: 12.09.2010 14:22

Цитата:
Напиши батник в той кодировке, которая используется в Temp.txt

Заработало!
Спасибище!!!

ComradG То же Сенкс!
Автор: bomzzz
Дата сообщения: 12.09.2010 14:50
странно работает и так и так, но как правельно???

Цитата:

.........
for /F "delims=" %%I in ('dir /A:-D /B') do (
if NOT %%~xI==.txt (
........


Цитата:

.........
for /F "delims=" %%I in ('dir /A:-D /B') do (
if NOT %%~xI%==.txt (
........
Автор: Rush
Дата сообщения: 12.09.2010 15:57
bomzzz

Цитата:
странно работает и так и так, но как правельно???

Ну задний-то знак процента здесь уже не относится к переменной. Он интерпретируется как знак вывода новой переменной и съедается.
Автор: bomzzz
Дата сообщения: 12.09.2010 16:02
то есть надо понимать правельна так - %%~xI ???
в описании команды фор чета мутно на этот счет, а с случаем когда и так и так работает первый раз столкнулся, обычно все на свете прокленешь пока эти проценты расставишь
Автор: king_stiven
Дата сообщения: 12.09.2010 16:52

Цитата:
%%~xI

да
Автор: bomzzz
Дата сообщения: 12.09.2010 16:54
Автор: bomzzz
Дата сообщения: 13.09.2010 00:35
внутри тела цикла FOR оказывается нельзя метки использовать, а как организовать счетчик тогда?
http://downloadmaster.ru/forum/viewtopic.php?f=2&t=12727


Цитата:
Как заставить DM автоматически создавать папку для закачки по имени скачиваемого файла, так как варианты: рacпoзнaвaть пo кaтeгopиям, сoздaвaть пoдпaпки пo дaтe, сoздaвaть пoдпaпки нa ocнoвe URL, сoздaвaть пoдпaпки нa ocнoвe имeни cepвepa, совсем неудобны, потом всё равно приходится создавать папки ручками и распихивать самому.



Цитата:
Всё раскладывается, но с плагином Descriptions который созаёт файл описания этот способ не подходит, может ещё что нибудь можно с батником намыслить.



Цитата:

@ECHO OFF
COLOR 9F
CLS
CHCP 1251
CD /D "C:\TEMP"
SET MYTIME=%DATE%-%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%

for /F "delims=" %%I in ('dir /A:-D /B') do (
if "%%~xI"=="" (
MD "%%I-%MYTIME%"
MOVE "%%I" "%%I-%MYTIME%"
if exist "%%I.txt" MOVE "%%I.txt" "%%I-%MYTIME%"
REN "%%I-%MYTIME%" "%%I"

) else (
if NOT %%~xI==.txt (
if exist "%%~nI" (
MD "%%~nI-%%~xI"
MOVE "%%I" "%%~nI-%%~xI"
if exist "%%I.txt" MOVE "%%I.txt" "%%~nI-%%~xI"

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

)
)
)
)

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

if exist "%%~nI" (
MD "%%~nI-%%~xI"
MOVE "%%I" "%%~nI-%%~xI"
if exist "%%I.txt" MOVE "%%I.txt" "%%~nI-%%~xI"

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

)
)
PAUSE

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

Добавлено:

задача:
в одной папке лежат абсолютно случайные файлы, как то: файлы с расширениями, без расширений и возможно имеющие одинаковые имена, но имеющие разные расширения (или не имеющие). к некоторым файлам созданы файлы описаний, имя которых: <имя файла с раширением.txt>, в то же время текстовые файлы, находящиеся в папке, могут и не являться файлами описаний. надо распихать все файлы по папкам с названием - <имя файла без расширения>, файлы описаний должны попасть в папки своих файлов. ну и понятное дело во всем этом могут быть русские буквы. так как файлы абсолютно случайные, какие то ситуации могут в этой схеме быть и не упомянуты


прим согласно неписанным правилам виндовс имя файла не может заканчиваться точкой(точками) и начинаться пробелом (пробелами), эти знаки автоматически откидываются
Автор: 01MDM
Дата сообщения: 13.09.2010 07:02
bomzzz

Цитата:
согласно неписанным правилам виндовс имя файла не может заканчиваться точкой(точками) и начинаться пробелом

На счет пробела ты ошибаешься



Автор: bomzzz
Дата сообщения: 13.09.2010 07:25
ты досом что ли такой файл создал?

Добавлено:
http://www.masm32.com/board/index.php?topic=14702.0
я вот тута разбирал как С-ишная библиотека работает, пробел откидывает в начале

Добавлено:
точно создает

Добавлено:
ECHO OFF
COLOR 9F
CLS
set COUNT=" 1.txt"
echo off>%COUNT%
pause

Добавлено:
переименовать его в винде в " 11.txt" уже не получаеца

Добавлено:
точку не дает. значит под досом еще можно было с пробела, а под виндой убрали. почему я так и не понял

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

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

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

Добавлено:
самое смешное что под восьмым досом (который в виндовс хп) эта дыра закрыта, а под виндой (тот же самый дос) нет

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

Добавлено:
только батники под виндой создают больше нигде не хочет - пишет файл нот фаунд или файл креате еррор
Автор: GORA2
Дата сообщения: 13.09.2010 11:35

Цитата:
имя файла не может заканчиваться точкой(точками)

Может, если файл имеет расширение:

Код: имя_файла............txt
Автор: res2001
Дата сообщения: 13.09.2010 11:47

Цитата:
прим согласно неписанным правилам виндовс имя файла не может заканчиваться точкой(точками) и начинаться пробелом (пробелами), эти знаки автоматически откидываются

Вполне себе можно создавать файлы и с пробелами в начале и с точкой в конце, другое дело что некоторые программы их не могут нормально открыть, но это дело этих программ.
Сама файловая система работает с такими файлами на ура.
Например FAR прекрасно создает подобные файлы, копирует их и т.п.
Автор: bomzzz
Дата сообщения: 13.09.2010 13:04
эти знаки могут входит в названия файлов, поэтому с конца они обрезаются спецаильным обработчиком. значит фар написан не корректно. потому что где то рано или поздно это вызовет конфликт. можете редактор диска взять и в нтфс таблицу вписать файл с именем из одних обратных слешей, но это не значит что такие имена допустимы

Добавлено:
скажите лучше как счетчик внутри фора организовать
Автор: res2001
Дата сообщения: 13.09.2010 13:32
bomzzz
FAR же написан не на голом месте и не работает с файловой системой напрямую. Все делается через WIN API, а значит винда ничего против таких файлов не имеет.


Цитата:
скажите лучше как счетчик внутри фора организовать


Код: set /a "count=0"
for ... do (
set /a "count+=1"
)
Автор: bomzzz
Дата сообщения: 13.09.2010 13:35
он не циклы фора должен считать, а независимо от фора счет вести внутри тела цикла

Добавлено:
фар ничего против не имеет и обратных слешей и прямых и кавычек в именах
и звездочек

Добавлено:
через апи напрямую точки обрезает а пробел нет.

Добавлено:
експлорер получается их обрезает
Автор: res2001
Дата сообщения: 13.09.2010 13:49
bomzzz

Цитата:
он не циклы фора должен считать, а независимо от фора счет вести внутри тела цикла

вместо инкремента можно использовать любое другое вычисляемое выражение, или счетчик в if вставить.
Ты подробнее напиши, что считать нужно.
Автор: bomzzz
Дата сообщения: 13.09.2010 13:52
при разборе выхода команды DIR если папка с таким именем существует дописать в конец нумер и так далее

Добавлено:
еще бы желательно сделать это без сетенабллокал, а то тогда восклицательные знаки в именах нельзя использовать. но так наверно не получица
Автор: res2001
Дата сообщения: 13.09.2010 14:08
bomzzz
дык, что значит
Цитата:
если папка с таким именем существует
, естественно существует, ты же dir по этим же папкам делаешь, или я чего-то не понял.
Получается просто добавить ко всем папкам порядковый номер?

Автор: bomzzz
Дата сообщения: 13.09.2010 14:12

Цитата:


задача:
в одной папке лежат абсолютно случайные файлы, как то: файлы с расширениями, без расширений и возможно имеющие одинаковые имена, но имеющие разные расширения (или не имеющие). к некоторым файлам созданы файлы описаний, имя которых: <имя файла с раширением.txt>, в то же время текстовые файлы, находящиеся в папке, могут и не являться файлами описаний. надо распихать все файлы по папкам с названием - <имя файла без расширения>, файлы описаний должны попасть в папки своих файлов. ну и понятное дело во всем этом могут быть русские буквы. так как файлы абсолютно случайные, какие то ситуации могут в этой схеме быть и не упомянуты


если в папке лежат файлы KAKA KAKA.BAT KAKA.RAR KAKA.ZIP KAKA.VOB
то каждая должна попасть в свою папку с именем KAKA-1 KAKA-2........

Добавлено:
я сделал что если папка уже существует то в конец расширение приляпывается, ну а как сделать с порядковыми нумерами. может от фора отказаться
Автор: res2001
Дата сообщения: 13.09.2010 14:18
bomzzz
чтоб не плодить кучу счетчиков для каждого файла, можно делать так:
когда надо создать папку проверяем ее на существование, если она уже существует, добавляем 1 в конец и снова проверяем. Делается достаточно просто рекурсивной функцией, что-то подобное только для файлов я уже делал.
Автор: bomzzz
Дата сообщения: 13.09.2010 14:19
ну не получается внутри фора сделать метку и отдельный цикл организовать. ругается на метки

Добавлено:
ну напиши батник человеку, на этом форуме даунлоадмастера в оснвоном люди которые компьютер только включать умеют. главное чтоб короче получилось. и желательно с нумерами

http://downloadmaster.ru/forum/viewtopic.php?f=2&t=12727
Автор: res2001
Дата сообщения: 13.09.2010 14:25
bomzzz
ща, попробую адаптировать для твоего варианта, то что у меня работает.
Автор: bomzzz
Дата сообщения: 13.09.2010 14:27
ну может я чета натупил засыпал уже когда делал

Добавлено:
http://forum.ru-board.com/topic.cgi?forum=62&topic=21297&start=200#20
рабочая болванка уже есть
Автор: res2001
Дата сообщения: 13.09.2010 15:16
bomzzz
как-то так получилось, по моему то что надо:

Код: @echo off
setlocal enabledelayedexpansion
set "outdir=c:\1\"
set "indir=c:\2\"
for /f "tokens=*" %%a in ('DIR /A-D /B %indir% ') do (
call :getdirname %%~na
md %outdir%!getdirname!
move %indir%%%a %outdir%!getdirname!\
)
exit

rem Имя каталога в переменной !getdirname!
:getdirname
if "%2" equ "" (set "fnum=0" & set "getdirname=%1") else (set "fnum=%2" & set "getdirname=%1-%2")
if exist %outdir%%getdirname%\nul (
set /a "fnum+=1"
call :getdirname %1 !fnum!
) else set "fnum="
exit /b
Автор: bomzzz
Дата сообщения: 13.09.2010 15:41
а как им пользоваться то.

Добавлено:
чета у мене ошибка, скопировалось что ли криво
Автор: sergioser
Дата сообщения: 13.09.2010 15:44
Добрый день!
Я новенький на форуме. Извините, если задам вопрос, который обсуждался уже, в поиске не нашел.
В командной строке опыт работы минимальный, надеюсь, что кто-нибудь откликнется.
Надо нарисовать скрипт, который бы анализировал текстовый файл на предмет наличия заданых символов (а именно мак-адреса). Если символы есть - послать мыло, или проиграть звук(а можно и одно и другое), если символов нет - ничего не делать.
Буду благодарен за любые мысли по поводу. Или может подскажите где уже похожее чего-нибудь обсуждалось.
Спасибо заранее за помощь.
Всего хорошего!
Автор: bomzzz
Дата сообщения: 13.09.2010 15:45
мак адреса заранее известного?
Автор: res2001
Дата сообщения: 13.09.2010 15:49
bomzzz

Цитата:
а как им пользоваться то.

инициализируй переменные indir и outdir правильными значениями.
dir перечисляет файлы из indir, а каталоги создаются в outdir.
Автор: bomzzz
Дата сообщения: 13.09.2010 15:52
ну я создал на диске С 1 и 2 папки и у меня апшипка, батник вылетел. в 1 наложил файлов

Добавлено:

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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