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

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

Автор: Maza Faka
Дата сообщения: 18.09.2007 10:48
Lutvun
Навскидку:

Код:
@Echo Off
For %%a In (C:\Test\*.*) Do (
If /I Not "%%~xa"==".DMF" (
If /I Not "%%~xa"==".DMFr" Move "%%a" D:\MyFolder
)
)
Автор: NIKZZZZ
Дата сообщения: 18.09.2007 15:10
dSasha

Цитата:
И всё-таки, кто-нибудь может объяснить, почему через буфер обмена из окна командной строки русский текст нормально копируется в Блокнот, а то же самое через >file.txt в виде крякозябров? Тут в ANSI или UNICODE, а туда в ASCII? Почему? Мне, , это очень странно.

Да ничего странного. При копировании через буфер обмена из окна командной строки это происходит не используя Dos, а стандартными средствами Windows.
"то же самое через >file.txt" - а в данном случае работает DOS. Причем, если прога работает в обход DOS (не использует его стандартные прерывания), то никакие chcp 1251 и т.п. не помогут. Наиболее подходящее решение - применить внешний конвертор.

Автор: dSasha
Дата сообщения: 18.09.2007 15:43
Да, я теперь *.txt открываю notepad++, им же конвертирую, но это лишний ручной труд, а "дядя Саша лёгких путей не ищет". А никакой утилитки просто конвертирующей кодировку нет?
Автор: 01MDM
Дата сообщения: 18.09.2007 16:28
dSasha

На примере systeminfo могу предложить такое решение

Код:
@echo off
systeminfo >1.tmp
for /f "delims=" %%i in ('type 1.tmp') do set "line=%%i" && call:sub
del 1.tmp
goto:eof
:sub
chcp 1251 >nul
echo %line% >>1.txt
chcp 866 >nul
Автор: Lutvun
Дата сообщения: 18.09.2007 16:48
Maza Faka
Второй код работает очень хорошо. Это не обезательно, но можна както сделать так, чтоб перемещялись файлы с подпапок (если они еть) в месте с папками, а всё теже файлы *.DMF и *.DMFr оставались на своём месте.
П.С. Спасибо огромное - очень помогли.
Автор: king_stiven
Дата сообщения: 18.09.2007 21:13
Lutvun

Код: @echo off
set out=D:\Test
set in=E:\MyFolder
cd /d "%out%"
for %%a in ("%out%") do set buk=%%~da
:begin
set /a sum+=1
if "%cd%" neq "%buk%\" (
cd ..
goto begin
)
set /a sum+=1
setlocal enabledelayedexpansion
set blok=!sum!
setlocal DISABLEDELAYEDEXPANSION
for /f "usebackq tokens=*" %%d in (`dir "%out%\*.*" /b /s /a:-d`) do (
If /I Not "%%~xd"==".DMF" (
If /I Not "%%~xd"==".DMFr" (
for /f "tokens=%blok%* delims=\" %%e in ("%%~dpd") do set "way=%%e\%%f"
set "way1=%%d"
call :Moving
)
)
)
:Moving
md "%in%\%way%"
Move "%way1%" "%in%\%way%"
Автор: dSasha
Дата сообщения: 19.09.2007 01:56
01MDM

Цитата:
Их много, рекомендую iconv.exe http://sourceforge.net/project/showfiles.php?group_id=25167
Вот Спасибо! Заработало.

Автор: Lutvun
Дата сообщения: 19.09.2007 07:21
king_stiven
Некатит. Просто виснит и всё.
Автор: dardreams
Дата сообщения: 19.09.2007 09:00
Людииии помогите решить задачку!!!
простая такая задачка )))
Пример:
Есть дата например 23.02.2007
нужно сделать чтобы батник высчитывал количество лет, месяцев ,дней, часов, минут, секунд (если можно и недель;)) до сегодняшней ...
Примерно такой ответ должен получиться __

Код:
x лет xx месяцев ххх дней хххх часов ххххх минут хххххх секунд
Автор: KapralBel
Дата сообщения: 19.09.2007 09:11
dardreams
Это на батнике достаточно сложно, что бы предложить решение на других языках (WSH, PowerShell, C++, Delphi)

Добавлено:
Надо учесть различие в количестве дней в месяцах, високосный/невисокосный год, о что батник очень обижается на числа 08 и 09 и т.д.
Автор: dardreams
Дата сообщения: 19.09.2007 09:58
KapralBel
Но ведь это возможно .. неужели никому не интересно ?
Автор: KapralBel
Дата сообщения: 19.09.2007 10:19
dardreams
Лично я выбираю наиболее удобный инструмент для задачи
на PowerShell это займет 2-3 строки

Код:
$dtCurrent = Get-Date
$dtPrev = $dtCurrent.AddDays(-53)
$dtPrev = $dtPrev.AddHours(-1)
"различие между датами: " +($dtCurrent-$dtPrev).Days+" дней и "+($dtCurrent-$dtPrev).Hours+ часов"
Автор: paveltr
Дата сообщения: 19.09.2007 10:30
Маленький вопрос. Команда chkdsk c: /f для томов с файловой системой NTFS требует нажатия кнопки Y (подтвердить проверку при следующей загрузке компа). Можно ли как-то автоматом эту Y команде передать?
Автор: vserd
Дата сообщения: 19.09.2007 10:31
dardreams
Можешь воспользоваться моим батником для перевода даты в число (http://forum.ru-board.com/topic.cgi?forum=62&topic=11825&start=0#20), затем вычитаешь, затем нужно будет это число переводить в нужный тебе формат.
Т.к. это довольно большое время на написание, пиши сам. Спасение утопающего, дело самого утопающего. А тут тебе помогут.


Добавлено:
paveltr
попробуй так
chkdsk c: /f <y.txt
y.txt выглядит так. <Enter> это клавиша
Y <Enter>
Автор: 01MDM
Дата сообщения: 19.09.2007 10:39
dardreams

Годы, месяцы и дни с учетом високосных, недели и прочее лень считать

Код:
@ECHO OFF

set /p OLD_DATE="Введите дату в формате dd.mm.YY (01.01.2001): "

:: DATES
for /f "tokens=1-3 delims=." %%i in ('echo %OLD_DATE%') do (
    set OLD_D=%%i
    set OLD_M=%%j
    set OLD_Y=%%k
    )

if %OLD_D:~0,1% equ 0 (set OLD_D=%OLD_D:~1%)
if %OLD_M:~0,1% equ 0 (set OLD_M=%OLD_M:~1%)

for /f "tokens=1-3 delims=." %%i in ('echo %DATE%') do (
    set CUR_D=%%i
    set CUR_M=%%j
    set CUR_Y=%%k
    )

if %CUR_D:~0,1% equ 0 (set CUR_D=%CUR_D:~1%)
if %CUR_M:~0,1% equ 0 (set CUR_M=%CUR_M:~1%)

:: YEAR
set /a RES_Y=%CUR_Y%-%OLD_Y%

:: MONTH
set /a RES_M=%CUR_M%-%OLD_M%
call:CHECK_M

:: DAY
set /a RES_D=%CUR_D%-%OLD_D%
if %RES_D% lss 0 (
    if %CUR_M% equ 1 (set /a RES_D+=31)
    if %CUR_M% equ 2 (set /a RES_D+=31)
    if %CUR_M% equ 3 (
        call:LEAP
        set /a RES_D+=%LEAP%)
    if %CUR_M% equ 4 (set /a RES_D+=31)
    if %CUR_M% equ 5 (set /a RES_D+=30)
    if %CUR_M% equ 6 (set /a RES_D+=31)
    if %CUR_M% equ 7 (set /a RES_D+=30)
    if %CUR_M% equ 8 (set /a RES_D+=31)
    if %CUR_M% equ 9 (set /a RES_D+=31)
    if %CUR_M% equ 10 (set /a RES_D+=30)
    if %CUR_M% equ 11 (set /a RES_D+=31)
    if %CUR_M% equ 12 (set /a RES_D+=30)
    set /a RES_M-=1
    call:CHECK_M
    )

:: RESULT
echo age is:
echo %RES_Y% лет, %RES_M% мес, %RES_D% дней
goto:EOF

:LEAP
set /a LEAP_Y=%CUR_Y/4*4
if %CUR_Y% equ %LEAP_Y% (
    set LEAP=29
    ) else (
    set LEAP=28
    )
goto:EOF

:CHECK_M
if %RES_M% lss 0 (
    set /a RES_M+=12
    set /a RES_Y-=1
    )

::
:: EOF
::
Автор: GORA2
Дата сообщения: 19.09.2007 12:45
dardreams

Цитата:
Есть дата например 23.02.2007
нужно сделать чтобы батник высчитывал количество лет, месяцев ,дней, часов, минут, секунд
А откуда должны взяться часы, минуты и секунды если есть начальная только дата без времени? И какой у Вас в системе формат даты и времени предполагается?
Автор: Maza Faka
Дата сообщения: 19.09.2007 14:18
Lutvun

Цитата:
Некатит. Просто виснит и всё.

Попробуй так:

Код:
@Echo Off

Set InDir=C:\Test
Set OutDir=D:\MyDir

For /F "Delims=" %%a In (
'Dir /B %InDir% ^| Findstr /I /V ".dmf\> .dmfr\>"') Do (
If Exist %InDir%\%%a\nul (
Xcopy /s /e /i /y "%InDir%\%%a" "%OutDir%\%%a"> nul 2>&1
rd /s /q "%InDir%\%%a"
) Else (
move "%InDir%\%%a" "%OutDir%"
)
)
Автор: paveltr
Дата сообщения: 19.09.2007 15:40

Цитата:
попробуй так
chkdsk c: /f <y.txt
y.txt выглядит так. <Enter> это клавиша
Y <Enter>

Спасибо, работает!
Автор: Maza Faka
Дата сообщения: 19.09.2007 16:03
paveltr
Можно проще, без доп. файлов:

Код:
Echo Y | Chkdsk c: /f /r
Автор: paveltr
Дата сообщения: 19.09.2007 16:25
Ещё красивше! Спасибо!!
Автор: king_stiven
Дата сообщения: 19.09.2007 19:12
Lutvun

Цитата:
Некатит. Просто виснит и всё.



Код: @echo off
set out=D:\Test
set in=E:\MyFolder
cd /d "%out%"
for %%a in ("%out%") do set buk=%%~da
:begin
set /a sum+=1
if /i "%cd%" neq "%buk%\" (
cd ..
goto begin
)
set /a sum+=1
setlocal enabledelayedexpansion
set blok=!sum!
setlocal DISABLEDELAYEDEXPANSION
for /f "usebackq tokens=*" %%d in (`dir "%out%\*.*" /b /s /a:-d`) do (
If /I Not "%%~xd"==".DMF" (
If /I Not "%%~xd"==".DMFr" (
for /f "tokens=%blok%* delims=\" %%e in ("%%~dpd") do set "way=%%e\%%f"
set "way1=%%d"
call :Moving
)
)
)
:Moving
md "%in%\%way%"
Move "%way1%" "%in%\%way%"
Автор: dardreams
Дата сообщения: 20.09.2007 07:17
есть возможность узнать четное или не четное число ? только короткий вариант
Автор: 01MDM
Дата сообщения: 20.09.2007 08:04
dardreams

Код:
set x=4
set y=x/2*2
if %x%==%y% echo even number else echo odd number
Автор: Rurik
Дата сообщения: 20.09.2007 08:21
01MDM
код проверял-то ?
правильно так

Код:
set x=4
set /a y=x/2*2
if %x%==%y% goto :even
echo odd number
goto :EOF
:even
echo even number
Автор: KapralBel
Дата сообщения: 20.09.2007 08:49
Ну если короткий,то чут поправим 01MDM

Код: set x=5
set /a y=x/2*2
if %x%==%y% (echo even number ) else (echo odd number )
Автор: dardreams
Дата сообщения: 20.09.2007 08:54
KapralBel
спасибо, это для определения високосного года )
Автор: 01MDM
Дата сообщения: 20.09.2007 08:58
Rurik

Проверял


Добавлено:
dardreams
Для високосного года дели и умножай на 4
Автор: klasny
Дата сообщения: 20.09.2007 09:01
Подскажите пожалуйста вариант для подключения по сетке с паролем с помощью бат файла.

в ручную это делается следующим образом:

В RUN пишется название или IP компьютера (например \\192.168.0.2)

Окно запрашивает имя пользователя и код

После этого компьютеру доступны принтер и файлы сети или данного компьютера.

После перезагрузки если компьютер не на сервере доступ пропадает и мне нужен файл который можно положить в автозапуск с восстановлением доступа.
Автор: KapralBel
Дата сообщения: 20.09.2007 09:18
klasny
Net use Z: \\192.168.0.2\C$ /User:User_Name user_Password

Добавлено:
Вернее

Net Use \\192.168.0.2 /User:User_Name user_Password

PS. Net /? - очень много интересного узнаешь
Автор: dardreams
Дата сообщения: 20.09.2007 09:45
KapralBel
забыл знак % поствить )

Код:
set x=5
set /a y=%x%/2*2
if %x%==%y% (echo even number ) else (echo odd number )

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

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


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