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

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

Автор: cluster
Дата сообщения: 12.01.2008 14:16
vu1tur
Что-то не очень понимаю, одна строчка всю работу выполняет?

Не получается выполнение команды

Код: Следующее использование оператора пути при подстановке параметров
в пакетных файлах является недопустимым: %~nb_%a.qqq

Для просмотра списка допустимых форматов введите CALL /? или FOR /?
Непредвиденное появление: date.cmd.

C:\>for /F "tokens=6,11 delims= " %a in ('ls -al --full-time *.txt') do @ren %b
b %~nb_%a.txt
Автор: ddna
Дата сообщения: 12.01.2008 14:17
king_stiven


Цитата:
ddna

@echo off
cd ..
for %%e in ("%~dp0\*") do move "%%e" "%cd%"


спасибо большое, хорошо бы что бы подкаталоги цеплял в переносе помогите дописать
Автор: king_stiven
Дата сообщения: 12.01.2008 14:20
ddna

объясни подробно с примерами, надо чтобы и из всех подкаталогов файлы перемещались в родительский относительно файла каталог?
Автор: ddna
Дата сообщения: 12.01.2008 14:28
да все файлы и каталоги перемещались на 1 уровень выше,
спс помог файлы перемещает. а вот как организовать что бы и каталоги тоже
Автор: king_stiven
Дата сообщения: 12.01.2008 14:43
ddna

давай пример в виде:
есть каталоги
1 c:\temp\45\ с файлами 1.txt 2.txt ,...
2 c:\temp\45\34\ с файлами ...
...

что и куда надо перенести?
Автор: ddna
Дата сообщения: 12.01.2008 14:49

Цитата:
давай пример в виде:
есть каталоги
1 c:\temp\45\ с файлами 1.txt 2.txt ,...
2 c:\temp\45\34\ с файлами ...


значит файлы из каталога 45 перенести в каталог temp и туда же перенести каталог 34 со всеми файлами

т.е. c:\temp с файлами каталога 45
и c:\temp\34
папочка 45 остается пустой
Автор: king_stiven
Дата сообщения: 12.01.2008 14:51
ddna
следуя твоей логике надо все файлы из c:\temp\45\ перенести в c:\45\ , каталог c:\temp\45\ остается пустой.
Какова глубина вложений подкаталогов? Чтоб сэкономить своё и чужое время, дай нормальный пример.
Автор: 01MDM
Дата сообщения: 12.01.2008 14:54
king_stiven

Цитата:
В сиысле, как это писать в фаре? То есть там есть что-то другое, чем текстовой редактор?

Не понял. Да в его встроенном редакторе + colorer чтобы выглядело повеселее

Автор: ddna
Дата сообщения: 12.01.2008 15:28
C:\temp\45 сфайлами
C:\temp\45\34 c файлами

нужно

перенести в c:\temp файлы каталога 45
а также в c:\temp создать папку 34 и перенести туда файлы из c:\temp\45\34 т.е. c:\temp\34
Автор: vu1tur
Дата сообщения: 12.01.2008 15:50
cluster

Цитата:
Что-то не очень понимаю, одна строчка всю работу выполняет?

ага

если в батнике, то так:

for /F "tokens=6,11 delims= " %%a in ('ls -al --full-time *.txt') do @ren %%b %%~nb_%%a.txt

естественно, нужно иметь ls из UnxUtils

Добавлено:
а винда какая?
Автор: 01MDM
Дата сообщения: 12.01.2008 15:59
ddna
Непонятно зачем батник?

move C:\temp\45\34 C:\temp
move C:\temp\45\*.* C:\temp
Автор: cluster
Дата сообщения: 12.01.2008 16:42
vu1tur

Цитата:
естественно, нужно иметь ls из UnxUtils

Хы) хоть бы предупредил) Спасибо.

Сделал всё на примитивном уровне:

Код: @Echo Off
For %%a In (SystemState_S1.bkf) Do @Call :Rena %%a %%~ta
GoTo :EOF

:Rena
Set f_Name=%1
Set f_Date=%2

Set d=%f_Date:~0,2%
Set m=%f_Date:~3,2%
Set y=%f_Date:~6,4%

if %m% GTR 2 (
set /a m = %m%+1
) else (
set /a m = %m%+13
set /a y = %y%-1
)

set /a n = 36525*%y%/100+306*%m%/10+%d%-621050
set /a dow = %n%-%n%/7*7+1

Ren %f_Name% SystemState_S1_N%dow%.bkf
GoTo :EOF
Автор: Elroir
Дата сообщения: 12.01.2008 17:56
cluster
И это работает? Какое число заносится в dow, если брать файл за сегодняшний день?
За вчерашний день? За завтрашний?
Автор: cluster
Дата сообщения: 12.01.2008 20:52
Elroir
1 - Пн
2 - Вт
7 - Вс

Цитата:
И это работает?

Блин, только что наткнулся на баг - не работают 8-ой и 9-ый месяцы. Может кто протестить? С остальными-то месяцами всё прекрасно.

Добавлено:
Прочитал о своей проблеме в справке SET /?

Цитата:
Числовые значения рассматриваются как десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел, и 0 для восьмеричных чисел. Например, числа 0x12, и 022 обозначают десятичное число 18. Обратите внимание на запись восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в восьмеричной системе исчисления цифры 8 и 9 не используются.

А вот что с этим делать, хз
Автор: 01MDM
Дата сообщения: 12.01.2008 21:27
cluster
Все нормально работает, а
на 08 и 09 можно добавить проверку

Код:
if %d:~0,1%==0 set d=%d:~1,1%
Автор: Elroir
Дата сообщения: 12.01.2008 21:47
cluster
Я тестировал на файлах за вчерашний день (11.01.2008), за сегодняшний (12.01.08) и завтрашний (13.01.08). Получал 6, 7 и 4 соответственно. Поэтому и спрашивал.
Сейчас проверил - получаю 5, 6 и 7
Автор: cluster
Дата сообщения: 12.01.2008 22:43
01MDM

Цитата:
if %d:~0,1%==0 set d=%d:~1,1%

Пишет: Непредвиденное появление: set.


Цитата:
Не совсем понятен расчет, от куда 621050?

Алгоритм брал отсюда
Автор: 01MDM
Дата сообщения: 12.01.2008 23:30
cluster

Цитата:
Пишет: Непредвиденное появление: set

У меня нормально все, правда без цикла в начале. Попробуй после @echo off поставить setlocal. И если копировал со страницы проверь что-бы не было замыкающих пробелов.


Код:
@echo off
setlocal
...
Set d=%f_Date:~0,2%
Set m=%f_Date:~3,2%
Set y=%f_Date:~6,4%

if %d:~0,1%==0 set d=%d:~1,1%
if %m:~0,1%==0 set m=%m:~1,1%
...
Автор: cluster
Дата сообщения: 12.01.2008 23:49
01MDM
Не знаю, чего поправил, но всё заработало.
Автор: vu1tur
Дата сообщения: 13.01.2008 00:41
cluster
вообще, вычислять день недели самому в батнике — это искать себе проблемы
почему не дать это делать самой ОС или готовым утилитам, которые отлажены?
Ну да, нужен ls. Big deal. Имхо UntUtils вообще на все машины ставить надо — жизнь облегчают
Автор: Nehemiah
Дата сообщения: 14.01.2008 08:52
Подскажите пожалуйста с таким вот заданием:
Разработать командный файл, который умеет просматривать заданный файл, содержащий в себе список пользователей и имя их домашних каталогов, и в интерактивном режиме задает вопрос – копировать текущему пользователю (в его домашний каталог) какой-либо заданный файл (в качестве параметра) или нет. Если ДА, то программа копирует файл.

Какими вариантами можно организовать выполнение данного задания. Помогите, никогда не делал батники, а тут вдруг резко пришлось, и я потерялся. Заранее спасибо.
Автор: Elroir
Дата сообщения: 14.01.2008 09:34
Nehemiah

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

Используй конструкцию "for /f ... " (справка - for /?)

Цитата:
и в интерактивном режиме задает вопрос – копировать текущему пользователю (в его домашний каталог) какой-либо заданный файл (в качестве параметра) или нет. Если ДА, то программа копирует файл.


Код:
set /p "ans=Copy file (y,n)? "
if "%ans%"=="y" (copy "%~1" [эта часть зависит от предыдущего кода])
Автор: Nehemiah
Дата сообщения: 14.01.2008 10:52
Спасибо, был бы очень признателен если бы выложили более подробное решение.


файл может быть таким:
Андрей С:\Andrei
Василий C:\Vasiliy
и т.д.

Либо таким:
Андрей
С:\Andrei
Василий
C:\Vasiliy
и т.д.
Автор: Elroir
Дата сообщения: 14.01.2008 13:26
Nehemiah
Для первого варианта:

Код:
@echo off
chcp 1251>nul
setlocal
for /f "tokens=1*" %%a in (users.txt) do call :process "%%a" "%%b" "%~1"
goto :EOF
:process
echo %~1 %~2
set "ans="
set /p "ans=Copy file (y,n)? "
if /i "%ans%"=="y" (echo copy %3 %2\)
Автор: king_stiven
Дата сообщения: 14.01.2008 13:39
Nehemiah

только если воскл знаков не может быть

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (log.txt) do (
set "line=!line! %%i"
echo %%i | FINDSTR ":\" > nul
if not errorlevel 1 call:line
)
goto:eof
:line
for /f "tokens=1* delims= " %%a in ("!line!") do set /p "ans=Copy file %%a in %%b(y,n)?"
if "%ans%"=="y" copy(копирование в справке смотри)
set line=
Автор: Mpa3b
Дата сообщения: 15.01.2008 03:50
возможно и не по теме. пытаюсь запустить содержимое CD диска с жесткого.

есть каталог(с содержимым CD диска), путь к нему

Код: Q:\How_make_dv\HOW_MAKE_DV
Автор: 01MDM
Дата сообщения: 15.01.2008 09:33
Mpa3b

Цитата:
z:/bin/VIDEO.exe


z:\bin\VIDEO.exe
Слешь виндовый
Автор: Mpa3b
Дата сообщения: 15.01.2008 11:40

Цитата:
01MDM
z:\bin\VIDEO.exe
Слешь виндовый

такая же ошибка.
полагаю не в слешах дело, ведь файл в обеих случаях запущен
но свои функции выполняет только когда ручками в виртуальный диск
зайдешь.
Наверное вопрос по принципу работы виртуального диска.
Автор: 01MDM
Дата сообщения: 15.01.2008 11:52
Mpa3b
А зачем вообще создавать виртуальный диск? Он эмулирует не CD\DVD, а локальный диск.
Попробуй так

Код:
subst z: /d
subst z: How_make_dv
pushd z:\bin
start "" VIDEO.exe
popd
Автор: koderr
Дата сообщения: 15.01.2008 13:57
Задача: зателнетиться на машину, послать команды, закрыть соединение. В стандартном telnet.exe возможности выполнения скрипта (как в ftp.exe) не нашел

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

Предыдущая тема: Доступ к реестру через RegEdit?


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