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

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

Автор: lorents
Дата сообщения: 13.08.2010 16:10
us0r

Цитата:
copy, move... Замена пути в батнике по условию... Конкретнее, плз...

мне как бы именно сам путь надо заменить

я с начало копирую файл

Код: copy /b /y %1 Dir2
Автор: us0r
Дата сообщения: 13.08.2010 16:13
setlocal
set dir2=%dir2path%
copy /b /y %1 %dir2%
REM А %dir2%- то остаётся... делай что хошь... Например:
echo. %dir2%
endlocal
Автор: lorents
Дата сообщения: 13.08.2010 16:37
us0r
у меня идет копирование, туда где мой bat-файл

Вот мой код

Код: @echo off
setlocal

for /f "delims=" %%i in ('dir /b /s /a-d dir1\*.png') do (
    "%~dp0Docs\pngkt.exe" "%%~fi"
    call :pngopt "%%~fi"
)

:pngopt
"%~dp0Docs\optipng.exe" -i0 -zw32k -f0-5 -force %1 > %temp%\png.log
set dir2=%dir2path%
copy /b /y %1 %dir2%
for /f "delims==,IDAT tokens=5" %%i in (%temp%\png.log) do (
    set f=%%i
)
set f=%f:~1,1%
del %temp%\png.log
"%~dp0Docs\pngout.exe" /k0 /f%f% %1
"%~dp0Docs\advpng.exe" -z -4 %1
"%~dp0Docs\deflopt.exe" %1
"%~dp0Docs\pngout.exe" /k0 /f%f% /r %dir2%
"%~dp0Docs\advpng.exe" -z -4 %dir2%
"%~dp0Docs\deflopt.exe" %dir2%
exit /b
Автор: us0r
Дата сообщения: 13.08.2010 16:42
lorents
%dir2path%- это такая переменная, котору ты пишешь сам.
Т.е. в set dir2=%dir2path% вместо %dir2path% ты пишешь нужный путь (disk:\folder\folder).
Автор: 01MDM
Дата сообщения: 13.08.2010 16:43
conty9

Цитата:
на экран выдаёт нужное значение, но переменную %Value% не устанавливает, и, соответственно, вытащить значения RHor / RVer / FHor у меня не получается. После нескольких часов пляски с бубном появилось желание разнести комп вдребезги.

Только без нервов.

Переменная %Value% существует только в контексте данного батника, т.к. установлено ограничение в виде setlocal. Лучше скажи что надо конкретно и как ты пытаешься эту переменную применить на деле.
Автор: lorents
Дата сообщения: 13.08.2010 17:02
us0r
А можно получить именно полный путь к файлу "C:\Dir2\1.png"?
Автор: us0r
Дата сообщения: 13.08.2010 17:06
set dir2="C:\Dir2\"
copy /b /y %1 %dir2%
set dir2="%dir2%\1.png"
Автор: conty9
Дата сообщения: 13.08.2010 17:08
01MDM, мне нужно получить из текста три числовые переменные - разрешение по горизонтали, вертикали и частоту развёртки (RHor / RVer / FHor).
Попутно - ещё вопросик - можно ли организовать ожидание на несколько секунд нажатия клавиши, скажем, M (если нажатие не произошло, или нажата любая другая клавиша - работаем дальше, а если нажал "М" - выход из батника). Пробовал с CHOICE, но там если нажать любую другую, кроме М, сбрасывает время - т.е., после этого ждёт до опупения, а не положенных пару секунд.
Автор: lorents
Дата сообщения: 13.08.2010 17:10
us0r
проблема в том, что я не знаю как будет назваться 1.png, может 2.png или 3.png
вот как можно это сделать?

Добавлено:
смотри задача такая, у меня есть файл C:\Dir1\1.png, вот надо заменить путь к файлу на C:\Dir2\1.png, можно это сделать?
Автор: us0r
Дата сообщения: 13.08.2010 17:33
set file=%%~nx1
REM Теперь %file% содержит имя файла...
set dir2="C:\Dir2\"
copy /b /y %1 %dir2%\%file%

А путь к файлу ты где менять собираешься? В переменной, файле?
Автор: 01MDM
Дата сообщения: 13.08.2010 17:43
conty9

Код:
@echo off
setlocal

for /f "tokens=1 delims=:" %%i in ('findstr /n "Preferred display settings" file.txt') do (
set "skip=%%i"
goto:next
)

:next

for /f "tokens=1,2 delims==" %%i in ('more +%skip% file.txt ^| findstr "Value"') do (
call:set %%i %%j
)

for /f "tokens=1,2,4 delims=x " %%i in ("%Value%") do (
    set "vert=%%i"
    set "horz=%%j"
    set "freq=%%k"
)
echo %vert% %horz% %freq%
goto:eof

:set
if not defined Value (set "%1=%~2")
Автор: lorents
Дата сообщения: 13.08.2010 17:45
us0r

Цитата:
А путь к файлу ты где менять собираешься? В переменной, файле?

в переменной файла
Автор: conty9
Дата сообщения: 13.08.2010 17:51
01MDM, спасибо ещё раз. Ключевое слово setlocal, без него не получалось! А по поводу дозированного ожидания нажатия кнопки никакую утиль не подскажешь?
Автор: us0r
Дата сообщения: 13.08.2010 17:54
Тебе %1 заменить?
Автор: 01MDM
Дата сообщения: 13.08.2010 17:56
conty9

Цитата:
А по поводу дозированного ожидания нажатия кнопки никакую утиль не подскажешь?

Специально загрузил 7-ку, хоть и лень, но там из коробки choice.exe

Код:
@echo off

choice /c "QWERTYUIOPASDFGHJKLZXCVBNM" /n /t 5 /d "Q" /m "Press M"
if %errorlevel% equ 26 echo 1
Автор: lorents
Дата сообщения: 13.08.2010 17:59
us0r
да
Автор: us0r
Дата сообщения: 13.08.2010 18:19
Ну, попробуй так:
set var=%1
set var="C:\Dir2\"
REM Вариант с заменой пути и оставлением имени файла в оригинале...
set var="C:\Dir2\%~nx1"

Как- то так... А в теле обрабатывай не %1, а %var%...
Автор: lorents
Дата сообщения: 13.08.2010 18:34
us0r
работает, большое спасибо!

Добавлено:
Объясните пожалуйста
Почему файлы *.jpeg заносятся в таблицу Images.csv дважды? проблема именно с *.jpeg
Вот пример таблицы Images.csv:

Цитата:
File name;Original Size;Output Size;Change in Bytes;% of Original
image1.jpg;152436;152436;0;100
image1.jpeg;152436;152436;0;100
image1.jpeg;152436;152436;0;100

Код: @echo off
setlocal enabledelayedexpansion

set logfile=Images.csv
if not exist %logfile% echo File name;Original Size;Output Size;Change in Bytes;%% of Original>>%logfile%

for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg Images\*.jpe') do (
    set origsize=%%~zi
    "%~dp0Docs\jhead.exe" "%%~fi"
    call :savelog "%%i" !origsize!
)
goto:eof

:savelog
set /a "change=%~z1-%2"
set /a "perc=%~z1*100/%2"
echo %~nx1;%2;%~z1;%change%;%perc%>>%logfile%
exit /b
Автор: SergiusPl
Дата сообщения: 13.08.2010 19:41
Подскажите пожалуйста, с батниками мало знаком.
Нужно запустить командную строку/запустить приложение дождаться пока оно отработает, запустить следующее, опять дождаться окончания работы и запустить следующее приложение.
Автор: us0r
Дата сообщения: 13.08.2010 19:44
SergiusPl
start "Kill after execution..." /wait %programname0%
start "Kill after execution..." /wait %programname1%
start "Kill after execution..." /wait %programname2%
start "Kill after execution..." /wait %programname3%
Автор: SergiusPl
Дата сообщения: 13.08.2010 19:47
us0r
Большое спасибо!
Автор: us0r
Дата сообщения: 13.08.2010 19:55
lorents
А с файлами .jpe всё впорядке?
Попробуй на папке с .jpe и .jpeg.
Потом раздели файлы по отдельным папкам и смотри как работает скрипт...
Автор: lorents
Дата сообщения: 13.08.2010 20:20
us0r
я понял в чем дело. если поставить Images\*.jpg Images\*.jpe, без Images\*.jpeg, то он все равно видит файлы *.jpeg.
если оставить только Images\*.jpg, то уже не видит.
Выходит, он просто находит файл, у которых расширения начинаются с букв jpe, он смотрит только первые три буквы, и поэтому он дважды заносил, т.к. видел дважды.
Это типа баг?
Автор: bomzzz
Дата сообщения: 13.08.2010 20:30
в досе допускались расширения только в три буквы (и имена в 6 потом 8) длинные имена сделали а длинные расширения нет, да и в винде как то не принято больше трех делать jpeg наверно единственный которое на ум приходит
ну а батники это эмуляция доса под виндовс
Автор: us0r
Дата сообщения: 13.08.2010 20:41
lorents
Я подумал о маске расширений... Старею... Забыл о 8.3
Автор: king_stiven
Дата сообщения: 13.08.2010 20:45
bomzzz
не так, батник различает html и htm

Добавлено:
lorents

Цитата:
я понял в чем дело. если поставить Images\*.jpg Images\*.jpe, без Images\*.jpeg, то он все равно видит файлы *.jpeg.

ересь
Автор: bomzzz
Дата сообщения: 13.08.2010 20:52
безусловно он их видит как два отдельных файла.
[more]



Добавлено:
и в тоже время:

[/more]
Автор: us0r
Дата сообщения: 13.08.2010 21:00
Ну так... всё правильно получается...
Автор: bomzzz
Дата сообщения: 13.08.2010 21:04
это наверно для совместимости с короткими именами
Автор: us0r
Дата сообщения: 13.08.2010 21:05
bomzzz
переименуй myiso в htm и посмотри что будет...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


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