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

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

Автор: nik4z
Дата сообщения: 03.06.2016 11:13
Jon_Dow

Цитата:
пример такой утилиты которая выводит в stderr командную строку своего вызова.

Я имел ввиду именно лог работы, а не командную строку своего вызова.
Это обычно утилиты, которые выводят информацию напрямую в поток stdout, например некоторые архиваторы, а в stderr только лог.
Автор: Jon_Dow
Дата сообщения: 03.06.2016 11:15
nik4z
Все понятно, с той реальной задачей связи нет. А то я уж подумал что что-то упустил.
Автор: wolf0425
Дата сообщения: 03.06.2016 13:51

Цитата:
И это заведомо не согласуется с утверждением
Я же копировал название через комманду:  dir > file.cmd  
Правильное утверждение будет такое: я тут чего-то накосорезил сам не помню как
а чего не помнить:
1. запустил dir > file.cmd - получил список, где двойные угловые кавычки заменены на <>
2. убедился что такие имена не проходят
3. попытался это исправить не меняя полученную при dir > file кодировку (866). Закономерно не смог.
Автор: ArabiQ
Дата сообщения: 03.06.2016 17:44
Ковычки тут не при чем. Щас эксперементировал - какие тока кавычки не ставил, одинарные, двойные, в разной раскладке, в разной кодировке - не че помогает.
Как победить то ?
Автор: VitaminP
Дата сообщения: 03.06.2016 18:45
файл Renamer.cmd (кодировка win1251):
@CHCP 1251>NUL
ren "c:\2\Счётчик Мыслей - «Кислород».mp3" "001. Счётчик Мыслей - Кислород.mp3"
Автор: Jon_Dow
Дата сообщения: 03.06.2016 20:04
ArabiQ
Давай поступим так: ты приведешь одно единственное имя файла который надо переименовать(из тех на которые выходит ошибка) и во что именно надо переименовывать, укажешь тип файловой системы, точную версию Windows, укажешь национальные настройки которые стоят на твоем компе, а мы, так уж и быть перепроверим
Так будет однозначно быстрее и точнее.

Добавлено:
PS - что-то троллем запахло...
Автор: nik4z
Дата сообщения: 04.06.2016 07:22
Jon_Dow

Цитата:
PS - что-то троллем запахло..

Да просто он неправильно решает задачу.

Его задачка решается простым батничком

Код: @echo off
set /a count=1

for /f "delims=" %%a in ('dir /b /o:n "c:\2\*.mp3"') do call :rename "%%a"
goto :eof

:rename
set count1=000%count%
set count1=%count1:~-3%
ren "%~dpnx1" "%count1%. %~nx1"
set /a count+=1
goto :eof
Автор: Nagual
Дата сообщения: 04.06.2016 18:53
Всем привет, добавил пару ссылок в полезных ссылках в шапке (первые 2 ссылки), а также обновил ссылки на утилиты wget и добавил wgetx64 в полезных утилитах

Задача такова:
есть некий текст
[more=вывод]<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="tcmd851ax64.exe">tcmd851ax64.exe</a></td><td align="right">24-Jan-2015 07:05 </td><td align="right">4.2M</td><td>&nbsp;</td></tr>
<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="tcmd852ax64.exe">tcmd852ax64.exe</a></td><td align="right">18-Sep-2015 14:54 </td><td align="right">4.3M</td><td>&nbsp;</td></tr>
<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="tcmd852x64.exe">tcmd852x64.exe</a></td><td align="right">26-Aug-2015 14:59 </td><td align="right">4.3M</td><td>&nbsp;</td></tr>
[/more]

из которого мне надо получить максимальную версию файла, то есть tcmd852ax64.exe

задачу решил, но, на мой взгляд, недостаточно оптимально, слишком много выводов в файл и прочее, жду ваших решений (так как давно не писал сам) и после, если понадобится, могу кинуть свое
Автор: Pasha_ZZZ
Дата сообщения: 04.06.2016 19:09
Nagual
Вот сразу для обеих версий (х32/х64)
Цитата:
wge% -nv -O- "http://ghisler.com/amazons3.php"|grep -iE "tcmd.*x32\.exe|tcmd.*x64\.exe"|sed "s/<\/a>.*$//;s/^.*href=//;s/>.*$//;s/""""//g"|wget -i-
не знаю как насчет оптимальности, но работает без вывода в файлы
Автор: Nagual
Дата сообщения: 04.06.2016 20:45
Pasha_ZZZ
спасибо, что надо, переделал немного, исключив утилиты sed и grep и оставив только 64 битную версию

for /f "tokens=2 delims==>" %%a in ('wget64 -nv -O- %site%^|findstr /c:"64-bit version only"') do wget64 -N -nd -c -t 0 %%a
Автор: Nagual
Дата сообщения: 07.06.2016 17:26
Уважаемые писатели команд и командных сценариев, рад сообщить о выходе этой новости

Возможно, теперь мы сможем пользоваться более богатым функционалом linux в среде windows
Автор: ipmanyak
Дата сообщения: 08.06.2016 08:00
DPAKOHKA

Код:
rem для файлов примерно так
for /f "tokens=*" %%i in ('dir /b /s /a:-d') do (
echo %%~ni
if not exist путьккаталогуB\%%~ni (
del /q %%~fi
)
)
Автор: Ciber SLasH
Дата сообщения: 14.06.2016 03:12
Ciber SLasH 14:10 26-05-2016
Цитата:
Приветствую всех!
Нужно из BAT-ника, перед запуском программы, определить не нажата ли клавиша  <Shift>. Если нажата, то запустить программу.
Как это реализовать?

Т.к. готового решения не нашёл, то пришлось писать программу:
getKey.exe [sec]
getKey.exe /h
ExitCode: 0 - <SHIFT> нажали, 1 - не нажимали, -X - ошибки
getKey
Автор: Nikoderiko
Дата сообщения: 15.06.2016 23:07
Есть папка. В ней куча подпапок. В каждой подпапке ещё папка. И в этой папке куча джипегов.
Как перенести все джипеги "на уровень выше"?

То есть например:
из C/X1/1 в C/X1
из C/X2/2 в C/X2
и так далее ???
Автор: Ciber SLasH
Дата сообщения: 15.06.2016 23:32
Nikoderiko

Код: @echo off
if "%~1"=="" (
echo Usage: %~nx0 <fullPath for folder>
pause & goto :EOF
)
if not exist "%~1" (
    echo "%~1" not exist!
    pause & goto :EOF
)
setlocal EnableDelayEdExpansion
set "folder=%~dp1"
for /r "%folder%" %%A in (*) do (
    set "t=%%~dpA"
    set "t=!t:~0,-1!"
    for %%B in ("!t!") do (
        set "to=%%~dpB"
    )
    move /Y "%%~A" "!to!"
)
endlocal
Автор: tong9
Дата сообщения: 16.06.2016 16:18
Непонятки привыполнении команды из консоли и из батника.

Если запустить команду из консоли, то файлик по маске находится и копируется
FOR %a in (m:\Папка\*mask*) DO XCOPY %a "m:\Папка\files" /f /h /k /y

Если запускаю из bat файла
FOR %%a in (m:\Папка\*mask*) DO XCOPY %%a "m:\Папка\files" /f /h /k /y
то выдаётся ошибка "The system cannot write to the specified device."

Погуглил ошибку и вроде как это возможно связано с кодировкой, но решения так и не нашёл.

Если кто в курсе, что можно попробовать сделать, откликнитесь
Автор: YuS_two
Дата сообщения: 16.06.2016 17:02
tong9

Цитата:
Если кто в курсе, что можно попробовать сделать, откликнитесь

Пакетный сценарий надо сохранить в кодировке cp866 (OEM)
Автор: AntoshAReal
Дата сообщения: 17.06.2016 11:27
Приветствую!
Прошу помочь со скриптом, т.к. он что-то не работает


Код:
:hide
@echo off
@SetLocal EnableExtensions EnableDelayedExpansion

rem check pc name
set netlogon=%logonserver%\netlogon

for /F %%t in ('type "%netlogon%\Server.txt"') do (
if /I "%%t"=="%Computername%" (call "%netlogon%\server.cmd") else (call "%netlogon%\user_pc.cmd")
)

@endlocal
Автор: YuS_two
Дата сообщения: 17.06.2016 12:12
AntoshAReal
А сам скрипт-то доступен по этому пути?

Код: %netlogon%\user_pc.cmd
Автор: AntoshAReal
Дата сообщения: 17.06.2016 12:52
YuS_two, да, сам скрипт доступен. Я же писал что выполняется только первая часть, если компа с таким именем нет, то второе условие не выполняется.
Автор: tong9
Дата сообщения: 17.06.2016 18:03
Совет поменять кодировку батника на cp866 (OEM) помог в копировании файлов. Спасибо!
Теперь заметил, что скрипт не находит файлы в русских подпапках. Как это можно вылечить?
FOR /R d:\Папка\ %%a in (files*.*) DO XCOPY %%a "d:\Папка\files" /f /h /k /y


Добавлено:
Заметил, что не копирует из папок с русскими названиями с пробелами. Если имя папки русское и без пробелов, то копирует. В команде XCOPY кавычками переменную с копируемым файлом выделял - не помогло. Какие ещё могут быть варианты?
Автор: AntoshAReal
Дата сообщения: 17.06.2016 20:37
tong9
Попробуйте так:

Код:
FOR /R d:\Папка\ %%a in ("files*.*") DO XCOPY "%%a" "d:\Папка\files" /f /h /k /y
Автор: YuS_two
Дата сообщения: 17.06.2016 23:29
AntoshAReal

Цитата:
выполняется только первая часть, если компа с таким именем нет, то второе условие не выполняется.

Там нет второго условия, оно всего одно. Это простой условный оператор: если равенство истинное, тогда выполняется то, что записано в скобках сразу за равенством, а если равенства нет, то выполняются команды в скобках, следующих за оператором Else.
Если доступность скрипта проверена, то остается единственный вариант, что скрипт user_pc.cmd сам неисправен и просто не работает... проверить легко: надо его запустить отдельно, из комстроки %logonserver%\netlogon\user_pc.cmd

tong9

Цитата:
не копирует из папок с русскими названиями с пробелами.


Цитата:
FOR /R d:\Папка\ %%a in (files*.*) DO XCOPY %%a "d:\Папка\files" /f /h /k /y

Для того, чтобы xcopy работало с именами содержащими пробелы, как минимум, необходимо заключить в кавычки источник, а если целевой объект содержит пробелы, то и его. Да и вообще, где могут присутствовать пробелы в именах, рекомендуется ставить в кавычки, особенно переменные.
В общем, если коротко, в данном случае переменная "%%a", которая после xcopy, не закавычена...
Автор: lorents
Дата сообщения: 18.06.2016 23:00
добрый вечер!

У меня есть 207 папок с одинаковыми файлами (отличие в размере файлов). Подскажите, как мне сделать таблицу в формате csv, и указать размеры всех файлов.

До этого использовал такой вариант, но сейчас он не подходит.

Код: @echo off

for %%i in (x\*) do call :s1 "x\%%~nxi" "u\%%~nxi" "d\%%~nxi" "l\%%~nxi" "r\%%~nxi" "f\%%~nxi"

:s1
shift
echo %~z0;%~z1;%~z2;%~z3;%~z4;%~z5>>1.csv
exit /b
Автор: Ciber SLasH
Дата сообщения: 19.06.2016 00:01
lorents

Код: @echo off
REM FileSize to CSV
if "%~1"=="" (
    echo Usage: %~nx0 ^<folderFullPath^> [^<CSV-fullPath^>]
    pause & goto :EOF
)
if not exist "%~1" (
    echo "%~1" not exist!
    pause & goto :EOF
)
setlocal EnableDelayEdExpansion
set "folder=%~dp1"
set "fileCSV=%~2"
set "fileCSV_def=%~dp0%~n0.csv"
if not exist "%~dp2" (
    set "fileCSV=%fileCSV_def%"
)
1>"%fileCSV%" echo Size;FileName
for /r "%folder%" %%A in (*) do (
    set "fs=%%~znxA"
    for /f "tokens=1,*" %%B in ("!fs!") do (
        set "st=%%~B;%%~C"
        1>>"%fileCSV%" echo !st!
    )
)
endlocal
Автор: YuS_two
Дата сообщения: 19.06.2016 08:16
Ciber SLasH
1. Пробелы в именах не учтены.
2. Размер с одинаковыми именами файлов, без абсолютного/относительного пути, трудно будет использовать в дальнейшем...
3. Скорее всего папки находятся в одном каталоге (lorents это никак не обозначил), но если вдруг пути будут разные или кроме перечисленных у него папок, там будут находится другие, то этот код уже не совсем корректно выведет результат...
Автор: lorents
Дата сообщения: 19.06.2016 10:39
Ciber SLasH
Мне по сути надо сделать таблицу с размерами файлов, чтобы в одной строке было указано 207 значений.

110239 109942 109482 110721 110576 110014 110099 110356 110239 109942
Автор: YuS_two
Дата сообщения: 19.06.2016 12:36
lorents,

Цитата:
Папки лежат в одном каталоге, все вместе.

Кроме нужных (207 - количество папок или файлов? или там в каждой папке по одному файлу?), есть там ещё какие-либо папки? Если их нет, то вариант от Ciber SLasH, вполне подойдет, даже без поправки на пробелы... просто переменную %%C убрать и всё.
А вообще, какой смысл в этих числах? Чтобы было просто красиво или общие/средние размеры посчитать надо?
Можно всё это на powershell сделать и там же посчитать, причем вообще не трогая таблиц...

Автор: lorents
Дата сообщения: 19.06.2016 13:31
YuS_two
У меня есть папку, и там лежат - 206 папок (скорректировал). В каждой папке лежат 8185 файлов с одинаковыми названиями, но с разными размерами. Вот мне надо построить таблицу с размерами этих файлов.

Когда папок было мало, я делал так:

Код: @echo off

for %%i in (b\*) do call :s1 "b\%%~nxi" "u\%%~nxi" "d\%%~nxi" "l\%%~nxi" "r\%%~nxi" "f\%%~nxi"

:s1
shift
echo %~z0;%~z1;%~z2;%~z3;%~z4;%~z5>>1.csv
exit /b
Автор: YuS_two
Дата сообщения: 19.06.2016 14:37
lorents

Цитата:
В каждой папке лежат 8185 файлов с одинаковыми названиями

Это как и чем их создавали и в какой ОС? Или они отличаются расширениями?


Цитата:
А сейчас папок 206 шт.

Это абсолютно неважно, в смысле количество папок.
Важно то, для чего размеры файлов в таблицу пихать... и если в каждой папке 8185 файлов, то построчно с 206 столбцами ... хмм, надо подумать.
Чисто из любопытства: что с ними можно делать без привязки к самим файлам? И размеры от всех файлов требуется в таблицу помещать?

Страницы: 123456789101112131415161718

Предыдущая тема: Не устанавливаются обои на рабочий стол (Windows 2003 x64)


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