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

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

Автор: res2001
Дата сообщения: 13.09.2010 16:09
bomzzz
Поправил код, почему то dir натравливался на текущий каталог.
Автор: bomzzz
Дата сообщения: 13.09.2010 16:10
все равно ошибка
Автор: res2001
Дата сообщения: 13.09.2010 16:10
если не правил переменные, файлов надо наложить в 2
Автор: bomzzz
Дата сообщения: 13.09.2010 16:11
все равно ошибка
Автор: res2001
Дата сообщения: 13.09.2010 16:13
какая ошибка?
у меня все путем, если файлов нет в indir, то пишет "файл не найден".
Автор: bomzzz
Дата сообщения: 13.09.2010 16:15
не видно какая. я даже батник сделал чтоб этот батник запустить и вывод в текстовый файл не напечатало
Автор: sergioser
Дата сообщения: 13.09.2010 16:17
[q][/q]
test
Автор: bomzzz
Дата сообщения: 13.09.2010 16:17
заработало видимо имеет значение где батник лежит я его в корень положил
Автор: res2001
Дата сообщения: 13.09.2010 16:17
bomzzz

Цитата:
не видно какая. я даже батник сделал чтоб этот батник запустить и вывод в текстовый файл не напечатало

а из командной строки запустить не судьба? чтоб сообщение осталось, ну или pause в конец вставить. Ну да ладно. Нашел ошибку - В indir и outdir имя диска по русски стояло. Код обновил.
Автор: bomzzz
Дата сообщения: 13.09.2010 16:18
эээээ , а файлы описаний?????
Автор: res2001
Дата сообщения: 13.09.2010 16:20
bomzzz

Цитата:
эээээ , а файлы описаний?????

какие файлы описаний? Что с ними делать? Как их опозновать?


Цитата:
заработало видимо имеет значение где батник лежит я его в корень положил

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

Цитата:
в то же время текстовые файлы, находящиеся в папке, могут и не являться файлами описаний

Дык все же как отличить файл описания, если расширения и у других файлов может быть txt?
Если тупо по расширению то так:

Код: @echo off
setlocal enabledelayedexpansion
set "indir=c:\3\"
set "outdir=c:\1\"
for /f "tokens=*" %%a in ('DIR /A-D /B %indir% ') do (
echo.%%a
call :getdirname %%~na
md %outdir%!getdirname!
move %indir%%%a %outdir%!getdirname!\
move %indir%%%~na.txt %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 16:25


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

Добавлено:
но у тех которые не описания могут быть свои описания.
Автор: sergioser
Дата сообщения: 13.09.2010 16:28
bomzzz

Цитата:
мак адреса заранее известного?


ДА. они попадають в файл текстовый после виполнения предидущей команды.
Автор: bomzzz
Дата сообщения: 13.09.2010 16:29
вот кстати еще ошибка получаица у меня надо исправить.
Автор: res2001
Дата сообщения: 13.09.2010 16:30
bomzzz
ну так как надо отрабатывает?
Надо еще с длинными именами отладить, где пробелы в имени есть.
Автор: bomzzz
Дата сообщения: 13.09.2010 16:30
sergioser

ну через find делается это.

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

Добавлено:
еще одна ошибка нашлась для файлов текстовых со своими описаниями
Автор: res2001
Дата сообщения: 13.09.2010 16:33
bomzzz
вариант с длинными именами:

Код: @echo off
setlocal enabledelayedexpansion
set "indir=c:\2\"
set "outdir=c:\1\"
for /f "tokens=*" %%a in ('DIR /A-D /B %indir% ') do (
echo.%%a
call :getdirname "%%~na"
md "%outdir%!getdirname!"
move "%indir%%%a" "%outdir%!getdirname!\"
move "%indir%%%~na.txt" "%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 16:34

sergioser
типа такого
FOR /F %%I IN ('TYPE MY.TXT ^| FIND "мас адрецк"') do echo %%I
Автор: res2001
Дата сообщения: 13.09.2010 16:36
bomzzz

Цитата:
еще одна ошибка нашлась для файлов текстовых со своими описаниями

Ну я думаю принцип то понятен, можешь в for вставлять любые дополнительные условия.
Функция getdirname сама ничего не создает и не переносит, только вычисляет имя создаваемого каталога, которое записывается в переменную getdirname, которую и используешь в дальнейшем.
Автор: bomzzz
Дата сообщения: 13.09.2010 16:41
ну у меня с номером чета не получилась. надо алгоритм новый выдумывать целиком. наверно.


Цитата:

@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 "%%I" (
         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
Автор: res2001
Дата сообщения: 13.09.2010 16:42
bomzzz

Цитата:
еще одна ошибка нашлась для файлов текстовых со своими описаниями

Какое имя имеют описания для текстовых файлов?
Автор: bomzzz
Дата сообщения: 13.09.2010 16:43
простоя думаю, что это должно проще делаться чем таким батником безумным в километр

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

MOYFILE.txt - описание: MOYFILE.txt.txt

Добавлено:
даунлоад мастером не пользуешься что ли?
Автор: res2001
Дата сообщения: 13.09.2010 16:45
bomzzz

Цитата:
MOYFILE.txt - описание: MOYFILE.txt.txt

ясно, щаз поправлю код.

Цитата:
даунлоад мастером не пользуешься что ли?

нет
Автор: bomzzz
Дата сообщения: 13.09.2010 16:46
а чем качаешь? орбитом что ли?

Добавлено:


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

Добавлено:
а от сетенейбл локал отказался потому что тогда восклицательные знаки в именах нельзя использовать
Автор: res2001
Дата сообщения: 13.09.2010 17:30
bomzzz
че-то if exist с длиными именами как-то странно работает, точнее не работает
Сегодня уже нет времени с ним возиться, завтра продолжу.
Автор: bomzzz
Дата сообщения: 13.09.2010 17:45
хм

Добавлено:
у меня работает вроде батник на рабочем столе.
Автор: king_stiven
Дата сообщения: 13.09.2010 18:19
bomzzz

Цитата:
if exist %%I

if exist "%%I"


Автор: bomzzz
Дата сообщения: 13.09.2010 18:26
ага лучше исправить

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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