Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Работа команды For (http://forum.oszone.net/showthread.php?t=137072)

kt626 07-04-2009 22:11 1087264

Работа команды For
 
Так работает
for /f "usebackq eol=W delims=e" %%A in ("%Temp%\ggg.txt") do @echo %%A
Так не работает
for /f "usebackq eol=W delims=e" %%A in ("%Temp%\Burns.Mp3") do @echo %%A
Как думаю причиной является наличие нулевых байтов в последнем файле. Кто-нибудь знает как это победить? А вообще-то задача проверить mp3-тег в файле.

amel27 08-04-2009 09:48 1087591

kt626, для MP3 придется использовать сторонние утилиты типа Tag
Код:

For /F "Tokens=1,2 Delims==" %%i In ('2^>^&1TAG --simple "%Temp%\Burns.Mp3"^|Find "="') Do Set %%i=%%j

@Echo Название:    %Title%
@Echo Исполнитель: %Artist%
@Echo Альбом:      %Album%
@Echo Год:        %Year%


Maza Faka 08-04-2009 09:52 1087594

Цитата:

Цитата kt626
Так не работает »

Дык и не должно работать, насколько я знаю команда For /F служит для обработки текстовых, а не бинарных файлов. Для просмотра и редактирования mp3-тэгов используйте EasyTag

kt626 08-04-2009 13:19 1087831

Так ведь ни в hh ntcmds.chm, ни в for /? не заявлено, что файлы должны быть только текстовые, вон, например, Find работает по-всякому, а за редакторы тегов спасибо, но задача состоит в том, чтобы из общей папки файлы с уже сгенерированными тегами рассортировать по папкам в зависимости от тега Альбом. Вижу, что Tag 2.0.43 вроде как может это сделать, поищу инфу по его командной строке, но вообще-то в данной теме сторонние проги как-то не cool, попробую еще что-то вроде:
Find "Альбом" "Файл.mp3" > %Temp%\Text.txt
for /f %%A in ("%Temp%\Text.txt") do @echo %%A

kt626 08-04-2009 13:41 1087848

И еще, кстати по синтаксису (ну не нашел я однозначного ответа в справке) допускается ли так:
for %%A in (File) do (команда1 & команда2.... & командаN)

gora 08-04-2009 15:04 1087941

Цитата:

Цитата kt626
допускается ли так:
for %%A in (File) do (команда1 & команда2.... & командаN) »

Допускается, но можно ведь и так:
Код:

for %%A in (File) do (
 команда1
 команда2
 ....
 командаN
)

Или обязательно нужно в одну строку?

kt626 08-04-2009 16:08 1088014

Да, спасибо Gora, конечно так красивее, в одну строчку необходимости нет

kt626 08-04-2009 20:20 1088228

И еще вопрос. При разборе файла командой For /f кириллица не понимается (подставляются Дос-символы). Их можно конвертить CMD комадой или набором команд?

amel27 09-04-2009 09:28 1088609

Цитата:

Цитата kt626
При разборе файла командой For /f кириллица не понимается »

нормально все понимается - в какой кодировке набран батник, в такой и будет искать подстроку,
перекодировать тоже можно: bat-файл на русском

Devils0411 24-07-2010 00:36 1459565

Код:

@Echo off
For %%a in ( "%ProgramFiles(x86)%\test4U\run.exe" "%ProgramFiles%\test4U\run.exe" ) Do (
if exist %%a (
set tvalue=%%~dpa
set tdir=%ini:~0,-1%
Echo %tdir%
pause
) Else (
goto end
)
)
:end
Echo ничего нет
pause

Не выводит на экран переменную. Скажите, где ошибка?

gora 24-07-2010 09:03 1459660

Цитата:

Цитата Devils0411
Не выводит на экран переменную. Скажите, где ошибка? »

Цитата:

Цитата Devils0411
Код:

set tdir=%ini:~0,-1%
»

Потому что не определена переменная ini.
PS
Переменная tdir определяется в цикле и, для ее вывода на экран в цикле, она должна быть не в знаках процента, а в знаках восклицания
Код:

Echo !tdir!
А в начале файла должна быть строка:
Код:

SetLocal enabledelayedexpansion

Devils0411 24-07-2010 11:27 1459713

gora, но ведь в переменную tdir записывается переменная ini с уменьшением на один символ с права.

gora 24-07-2010 11:38 1459723

Цитата:

Цитата Devils0411
но ведь в переменную tdir записывается переменная ini с уменьшением на один символ с права »

Еще раз повторю:
Цитата:

Цитата gora
что не определена переменная ini. »

Если переменная в батнике не определена - значит она "пустая" (нет ее). Сколько от нее не отрезай все равно в tdir ни чего не будет добавлено и она тоже будет "пустая" и вывести ее на экран консоли не удастся!

Devils0411 24-07-2010 12:08 1459732

ее нужно определить до цикла или внутри?

gora 24-07-2010 12:18 1459738

Можно до цикла, тогда можно использовать %ini%, а если в цикле, то нужно будет использовать !ini! и строку SetLocal enabledelayedexpansion в начале файла (писал уже выше).

Devils0411 24-07-2010 12:34 1459746

Спасибо за помощь. Решил все-таки в цикле использовать.

Devils0411 24-07-2010 17:23 1459919

Все же проблема осталась...
Код:

@Echo off
SetLocal enabledelayedexpansion
For %%a in ( "%ProgramFiles(x86)%\test4U\run.exe" "%ProgramFiles%\test4U\run.exe" ) Do (
if exist %%a (
set ini=%%~dpa
set tdir=!ini:~0,-1!
 Echo !tdir!
pause
) Else (
goto end)
)
:end
Echo ничего нет
pause

Почему то в расчет берется первое множество. Т.е. если в первом множестве не был найден файл, то просто переходит в метке :end, и не проверяет второе множество.

gora 24-07-2010 17:34 1459922

Попробуйте так:
Код:

@Echo off
SetLocal enabledelayedexpansion
For %%a in ("%ProgramFiles(x86)%\test4U\run.exe" "%ProgramFiles%\test4U\run.exe") Do (
        if exist %%a (
                set ini=%%~dpa
                set tdir=!ini:~0,-1!
                Echo !tdir!
        )
)
If Not Defined tdir Echo ничего нет
pause



Время: 10:24.

Время: 10:24.
© OSzone.net 2001-