[Цитировать]

    hseg0
  • 30496
  • Стаж: 2 года 10 месяцев
  • Сообщений: 3
  • Репутация:0

    [+] [-]
Здравствуйте. Хотелось бы батником изменить дату создания, дату изменения папки (возможно и не только эти параметры) по определенному пути, чтобы эти изменения не затронули все подпапки и все файлы внутри. Спасибо за ответ.

[Цитировать]

    darkalexx4
  • 346
  • Стаж: 9 лет 10 месяцев
  • Сообщений: 175
  • Репутация:7

    [+] [-]
  • Откуда: Минск
Господа, приветствую. Помогите советом, ни как не могу понять почему при сохранении файла, текст в нем не читаемый. Вот код:
@echo off
chcp 65001
mode con:cols=120 lines=50
cls
echo Просмотр информации о статусе активации Windows...
set /p filename=Введите имя файла для сохранения:
cscript //nologo C:\Windows\System32\slmgr.vbs /dlv > "%filename%.txt"
echo Результат сохранен в файл %filename%.txt
powershell -Command "(Get-Content '%filename%.txt') | Set-Content -Encoding utf8 '%filename%.txt'"
pause

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 10 месяцев
  • Сообщений: 3863
  • Репутация:127

    [+] [-]
darkalexx4, действительно, лажа.
UTF-16 не спасёт отца русской демократии?

[Цитировать]

    darkalexx4
  • 346
  • Стаж: 9 лет 10 месяцев
  • Сообщений: 175
  • Репутация:7

    [+] [-]
  • Откуда: Минск
Ander_73,

Нет)

‚ҐабЁп б«г¦Ўл «ЁжҐ­§Ёа®ў ­Ёп Їа®Ја ¬¬­®Ј® ®ЎҐбЇҐзҐ­Ёп: 10.0.19041.2728
€¬п: Windows(R), Professional edition
ЋЇЁб ­ЁҐ: Windows(R) Operating System, OEM_DM channel
€¤Ґ­вЁдЁЄ в®а  ЄвЁў жЁЁ: bd3762d7-270d-47фывф29ca45278a
€¤Ґ­вЁдЁЄ в®а ЇаЁ«®¦Ґ­Ёп: 55c92734-d682-4d71-98фывфыf16059f
ђ биЁаҐ­­л© PID: 03612-03305-088-261077-02-1049фывф
Љ ­ « Є«о祩 Їа®¤гЄв®ў: OEM:DM
€¤Ґ­вЁдЁЄ в®а гбв ­®ўЄЁ: 3914305099724243788766фвфывфывфыв15823348531120
€бЇ®«м§г©вҐ URL- ¤аҐб «ЁжҐ­§ЁЁ: https://activation-v2.sls.microsoft.com/SLActivateProduct/SLActivateProduct.asmx?configextension=DM
URL- ¤аҐб Їа®ўҐаЄЁ: https://validation-v2.sls.microsoft.com/SLWGA/slwga.asmx
— бвЁз­л© Є«оз Їа®¤гЄв : YTDGP
‘®бв®п­ЁҐ «ЁжҐ­§ЁЁ: Ё¬ҐҐв «ЁжҐ­§Ёо
Ћб⠢襥бп зЁб«® ў®§ўа йҐ­Ё© Є Ёб室­®¬г б®бв®п­Ёо  ЄвЁў жЁЁ Windows: 1001
Ћб⠢襥бп зЁб«® ў®§ўа в®ў Є Ёб室­®¬г б®бв®п­Ёо  ЄвЁў жЁЁ SKU: 1001
„®ўҐаҐ­­®Ґ ўаҐ¬п: 06.04.2023 10:47:03
Использовал такой параметр:
powershell -Command "(Get-Content '%filename%.txt') | Set-Content -Encoding Unicode '%filename%.txt'"
Я с кодами на не очень, пробую написать вывод информации исходя из источников в интернете!

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 10 месяцев
  • Сообщений: 3863
  • Репутация:127

    [+] [-]
darkalexx4, я имел ввиду, что выполнить конвертацию в UTF-16 гораздо проще. Ну, нет так нет.
for /f "delims=" %%a in ('cscript //nologo C:\Windows\System32\slmgr.vbs /dlv') do call :test
exit
:test
>nul chcp 65001
for %%i in (1) do >>filename.ext echo/%%a

[Цитировать]

    darkalexx4
  • 346
  • Стаж: 9 лет 10 месяцев
  • Сообщений: 175
  • Репутация:7

    [+] [-]
  • Откуда: Минск
И на том спасибо, буду дальше ковыряться)

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 10 лет
  • Сообщений: 2599
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
99954
Использовал такой параметр:
powershell -Command "(Get-Content '%filename%.txt') | Set-Content -Encoding Unicode '%filename%.txt'"
darkalexx4, aa
А так:
powershell -Command "(Get-Content '%filename%.txt') | Set-Content -Encoding Default '%filename%.txt'"

[Цитировать]

    darkalexx4
  • 346
  • Стаж: 9 лет 10 месяцев
  • Сообщений: 175
  • Репутация:7

    [+] [-]
  • Откуда: Минск
sergeysvirid, aa Не проходит(

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 10 месяцев
  • Сообщений: 3863
  • Репутация:127

    [+] [-]
Я вот сейчас не понял, я же дал код вывода в UTF8. Опять всё не так? ag

[Цитировать]

    darkalexx4
  • 346
  • Стаж: 9 лет 10 месяцев
  • Сообщений: 175
  • Репутация:7

    [+] [-]
  • Откуда: Минск
Ander_73, Я выше писал, что не силен в кодах, куда мне поставить ваш код нужно?
Если Вас не затруднит, полный код с вашими правками впишите пожалуйста!

[Цитировать]

    darkalexx4
  • 346
  • Стаж: 9 лет 10 месяцев
  • Сообщений: 175
  • Репутация:7

    [+] [-]
  • Откуда: Минск
Заработало)))))

Итог

@echo off
set /p filename=Name:
set "log_file=%filename%.txt"
for /f "delims=" %%a in ('cscript //nologo C:\Windows\System32\slmgr.vbs /dlv') do call :test "%%a"
goto :eof
:test
set "line=%~1"
setlocal enabledelayedexpansion
>nul chcp 65001
>>"%log_file%" echo/!line!
endlocal
goto :eof
Спасибо всем за идеи!
Немного изменил код, теперь можно самому задать имя конечному файлу!

[Цитировать]

    JuraAD
  • 28398
  • Стаж: 3 года 5 месяцев
  • Сообщений: 86
  • Репутация:27

    [+] [-]
Есть время, решил описать полезность...
Часто пользуюсь не cmd shell-ом а linux... Работаю в выни дома, но нравится linux.
Как совместить полезное с приятным!?...
Локальный Linux shell в Windows
Есть пакеты утилиток linux большого размера типа: cygwin, msys и т.п...
Но есть путь проще и компактнее - busybox.
busybox - пакет базовых утилит linux, собранных в едином файле "exe" (конвеер базовых утилит linux), пример справки:

busybox.exe --help

BusyBox v1.36.0.git (2022-09-19 21:24:05)
BusyBox is copyrighted by many authors between 1998-2022.
Licensed under GPLv2. See source distribution for detailed
copyright notices.
Usage: busybox [function [arguments]...]
or: busybox --list[-full]
or: busybox --install [-s] [-u|DIR]
or: busybox --uninstall [-n] file
or: function [arguments]...
BusyBox is a multi-call binary that combines many common Unix
utilities into a single executable. The shell in this build
is configured to run built-in utilities without $PATH search.
You don't need to install a link to busybox for each utility.
To run external program, use full path (/sbin/ip instead of ip).
Currently defined functions:
[, [[, ar, arch, ascii, ash, awk, base32, base64, basename, bash, bc, bunzip2, busybox, bzcat, bzip2, cal, cat, chattr,
chmod, cksum, clear, cmp, comm, cp, cpio, crc32, cut, cygpath, date, dc, dd, df, diff, dirname, dos2unix, dpkg,
dpkg-deb, du, echo, ed, egrep, env, expand, expr, factor, false, fgrep, find, fold, free, fsync, ftpget, ftpput,
getopt, grep, groups, gunzip, gzip, hd, head, hexdump, httpd, iconv, id, inotifyd, install, ipcalc, jn, kill, killall,
less, link, ln, logname, ls, lsattr, lzcat, lzma, lzop, lzopcat, man, md5sum, mkdir, mktemp, mv, nc, nl, nproc, od,
paste, patch, pgrep, pidof, pipe_progress, pkill, printenv, printf, ps, pwd, readlink, realpath, reset, rev, rm, rmdir,
rpm, rpm2cpio, sed, seq, sh, sha1sum, sha256sum, sha3sum, sha512sum, shred, shuf, sleep, sort, split, ssl_client, stat,
strings, su, sum, sync, tac, tail, tar, tee, test, time, timeout, touch, tr, true, truncate, ts, tsort, ttysize, uname,
uncompress, unexpand, uniq, unix2dos, unlink, unlzma, unlzop, unxz, unzip, uptime, usleep, uudecode, uuencode, watch,
wc, wget, which, whoami, whois, xargs, xxd, xz, xzcat, yes, zcat
Где взять?
Можно собрать из cygwin или msys - сложная структура каталогов, больше подходит когда нужны серверы и всё такое.
Нам нужен простой, базовый набор функций. Воспользуемся пакетом git-for-windows: x32, x64
Распаковать пакет нужной разрядности и забрать файл из каталога "mingw32\bin\busybox.exe", остальное можно выбросить.
У меня он размещен в каталогах:

B:\sys\util\linux\

bash.cmd
bash_.cmd
bash_set.reg
busybox.cmd
busybox_.cmd
busybox_set.reg
mc\
unxutils\
utils\
x32\
busybox.exe
x32_\
busybox.exe
x64\
busybox.exe
x64_\
busybox.exe
Создадим файл запуска busybox для каталогов "32_" и "64_" я держу 2 варианта: x32 и x64:

B:\sys\util\linux\busybox_.cmd

@echo off & setlocal enableextensions enabledelayedexpansion
pushd
set ".c=64_"
if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if not defined PROCESSOR_ARCHITEW6432 set ".c=32_"
"%~dp0x%.c%\busybox.exe" %*
popd
endlocal
goto :eof
Чтоб Вынь знала где находится busybox, создадим "reg" файл:

B:\sys\util\linux\busybox_set.reg

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\busybox.exe]
@="b:\\sys\\util\\linux\\busybox_.cmd"
Регистрируем, теперь Вынь знает где находится наш busybox и по команде (к примеру: "busybox ls -1") в любом каталоге выполнит действия...
Создадим файл запуска bash для каталогов "32_" и "64_" я держу 2 варианта: x32 и x64:

B:\sys\util\linux\bash_.cmd

@echo off & setlocal enableextensions enabledelayedexpansion
pushd
set ".c=64_"
if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if not defined PROCESSOR_ARCHITEW6432 set ".c=32_"
start "bash" "%~dp0x%.c%\busybox.exe" bash -s -c "export PS1='\\[\\e[33m\\]\\u@\\h:\\[\\e[0m\\]\\w# ' PS2='> 1' PS4='+ 2';"
popd
endlocal
goto :eof
Чтоб Вынь знала где находится bash, создадим "reg" файл:

B:\sys\util\linux\bash_set.reg

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\bash.exe]
@="b:\\sys\\util\\linux\\bash_.cmd"
Регистрируем, теперь Вынь знает где находится наш bash и по команде "bash" в любом каталоге запустить shell...
ps: Скрины не прикладываю, кому интересно - попробуют... -)

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 9 лет 3 месяца
  • Сообщений: 527
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
Приветствую aa
Столкнулся с такой проблемой: попался ПК, на котором обработка списка работает не так как на остальных ПК.
Полдня ломал голову, пока нашел проблему, оказалось что на одном из этапов почему-то начальная буква в некоторых путях становится заглавной. Объяснить сложно, проще показать...
Генерируется текстовый список такого вида:

list2.txt

/data/app/~~vbb-4Sr_TFUFVRUiIznlMA==/com.cloudmosa.puffinTV-V-3biLIY_JveVupG4NBadw==/base.apk=com.cloudmosa.puffinTV
/data/app/~~beLf1VwyPmEoYVQQGUuqaQ==/com.tiktok.tv-JP1bQPRwxo20HuGQnSAiRw==/base.apk=com.tiktok.tv
/data/app/~~PrAg3sL12Hndgd0_CEwJ1g==/com.amazon.tv.leanbacklauncher-j9b4xh7N_I3Gn6othd9-lw==/base.apk=com.amazon.tv.leanbacklauncher
/data/app/~~QuplC_JWOEyL8UlsvzDf1g==/limehd.ru.ctv-L0bpN0Hs9CPuy1zZTPcS0g==/base.apk=limehd.ru.ctv
/data/app/~~xKzkv8ovPXswE5FxsLwtAQ==/com.lonelycatgames.Xplore-BRAB1f1Li6jnszZxXn9Uuw==/base.apk=com.lonelycatgames.Xplore
/data/app/~~t85AaDRhPui2X0v6Xs3S9A==/ru.fmplay-V8BpIYx3KoD9qbVBRo3mtg==/base.apk=ru.fmplay
/product/app/Esticker/Esticker.apk=com.tcl.esticker
/product/priv-app/PlayAutoInstall/PlayAutoInstall.apk=android.autoinstalls.config.google.gtvpai
/product/app/InitSetup/InitSetup.apk=com.tcl.initsetup
/system/priv-app/CalendarProvider/CalendarProvider.apk=com.android.providers.calendar
/system_ext/priv-app/TwoPanelSettingsOverlay/TwoPanelSettingsOverlay.apk=com.android.tv.settings
На самом деле строк конечно больше.
Требуется из каждой строки получить две части: 1я - до последнего знака "=", 2я - после.
Если откинуть все лишенее, у меня это было реализовано так:

test2.cmd

@echo off
cls
SetLocal EnableExtensions
cd /d "%~dp0"
for /f "delims=" %%A in (list2.txt) do (
  for /f "tokens=1,2 delims==" %%a in ("%%~nxA") do (
    set "package=%%b"
    set "fullpath=%%~pA%%a"
    call set "fullpath=%%fullpath:\=/%%"
    call echo %%fullpath%%
  )
)
echo.
pause
Правильный выхлоп для этого списка:

правильно

/data/app/~~vbb-4Sr_TFUFVRUiIznlMA==/com.cloudmosa.puffinTV-V-3biLIY_JveVupG4NBadw==/base.apk
/data/app/~~beLf1VwyPmEoYVQQGUuqaQ==/com.tiktok.tv-JP1bQPRwxo20HuGQnSAiRw==/base.apk
/data/app/~~PrAg3sL12Hndgd0_CEwJ1g==/com.amazon.tv.leanbacklauncher-j9b4xh7N_I3Gn6othd9-lw==/base.apk
/data/app/~~QuplC_JWOEyL8UlsvzDf1g==/limehd.ru.ctv-L0bpN0Hs9CPuy1zZTPcS0g==/base.apk
/data/app/~~xKzkv8ovPXswE5FxsLwtAQ==/com.lonelycatgames.Xplore-BRAB1f1Li6jnszZxXn9Uuw==/base.apk
/data/app/~~t85AaDRhPui2X0v6Xs3S9A==/ru.fmplay-V8BpIYx3KoD9qbVBRo3mtg==/base.apk
/product/app/Esticker/Esticker.apk
/product/priv-app/PlayAutoInstall/PlayAutoInstall.apk
/product/app/InitSetup/InitSetup.apk
/system/priv-app/CalendarProvider/CalendarProvider.apk
/system_ext/priv-app/TwoPanelSettingsOverlay/TwoPanelSettingsOverlay.apk
Но почему-то на одном ПК выхлоп такой:

не правильно

/Data/app/~~vbb-4Sr_TFUFVRUiIznlMA==/com.cloudmosa.puffinTV-V-3biLIY_JveVupG4NBadw==/base.apk
/Data/app/~~beLf1VwyPmEoYVQQGUuqaQ==/com.tiktok.tv-JP1bQPRwxo20HuGQnSAiRw==/base.apk
/Data/app/~~PrAg3sL12Hndgd0_CEwJ1g==/com.amazon.tv.leanbacklauncher-j9b4xh7N_I3Gn6othd9-lw==/base.apk
/Data/app/~~QuplC_JWOEyL8UlsvzDf1g==/limehd.ru.ctv-L0bpN0Hs9CPuy1zZTPcS0g==/base.apk
/Data/app/~~xKzkv8ovPXswE5FxsLwtAQ==/com.lonelycatgames.Xplore-BRAB1f1Li6jnszZxXn9Uuw==/base.apk
/Data/app/~~t85AaDRhPui2X0v6Xs3S9A==/ru.fmplay-V8BpIYx3KoD9qbVBRo3mtg==/base.apk
/product/app/Esticker/Esticker.apk
/product/priv-app/PlayAutoInstall/PlayAutoInstall.apk
/product/app/InitSetup/InitSetup.apk
/system/priv-app/CalendarProvider/CalendarProvider.apk
/system_ext/priv-app/TwoPanelSettingsOverlay/TwoPanelSettingsOverlay.apk
Т.е. в путях "data" заменяется на "Data", что не дает работать на последующем этапе.
Возможно подобных ПК было больше, заметил случайно (просто для получения конечного результата у меня еще используется что-то типа базы имен, и я мог просто не замечать)
...
С чем может быть связано такое поведение? и можно ли обойти? трогать реестр и т.п. тоже не вариант, скрипт работает без прав админа.
В идеале, конечно, вообще заменить способ "расчленения" строк, но я что-то ничего толкового выдумать не могу. Важно так же, что бы было поменьше движений и сложных конструкций, ато обработка затянется, списки порой большие (и по пути из каждой строки идет обращение к устройству по сети, потом выполнение команды, потом забираю ответ... это довольно долго, поэту и добавил базу с готовыми именами, сначала результат ищется в ней)
...
Есть еще пара черновых вариантов:

test3.cmd

@echo off
cls
SetLocal EnableExtensions
cd /d "%~dp0"
if EXIST "list3.txt" del /f /q "list3.txt"
for /f "delims=" %%A in (list2.txt) do (
  set "fullpath=%%A"
  call set "fullpath=%%fullpath:.apk=.apk %%"
  >>list3.txt call echo %%fullpath%%
)
for /f "tokens=1,2" %%A in (list3.txt) do (
  set "package=%%B"
  call set "package=%%package:~1%%"
  set "fullpath=%%A"
  call echo %%fullpath%%
)
if EXIST "list3.txt" del /f /q "list3.txt"
echo.
pause
exit

test3.cmd (var2)

@echo off
cls
SetLocal EnableExtensions
cd /d "%~dp0"
if EXIST "list3.txt" del /f /q "list3.txt"
for /f "delims=" %%A in (list2.txt) do (
  set "fullpath=%%A"
  call set "fullpath=%%fullpath:.apk=.apk %%"
  for /f "tokens=1,2" %%a in ('call echo %%fullpath%%') do (
    set "package=%%b"
    call set "package=%%package:~1%%"
    set "fullpath=%%a"
    call echo %%fullpath%%
  )
)
if EXIST "list3.txt" del /f /q "list3.txt"
echo.
pause
exit

test4.cmd

@echo off
cls
SetLocal EnableExtensions
cd /d "%~dp0"
for /f "tokens=1-10 delims=/" %%A in (list2.txt) do (
  if "%%B" NEQ "" (set "package=%%B" & set "fullpath=%%A")
  if "%%C" NEQ "" (set "package=%%C" & set "fullpath=%%A/%%B")
  if "%%D" NEQ "" (set "package=%%D" & set "fullpath=%%A/%%B/%%C")
  if "%%E" NEQ "" (set "package=%%E" & set "fullpath=%%A/%%B/%%C/%%D")
  if "%%F" NEQ "" (set "package=%%F" & set "fullpath=%%A/%%B/%%C/%%D/%%E")
  if "%%G" NEQ "" (set "package=%%G" & set "fullpath=%%A/%%B/%%C/%%D/%%E/%%F")
  if "%%H" NEQ "" (set "package=%%H" & set "fullpath=%%A/%%B/%%C/%%D/%%E/%%F/%%G")
  if "%%I" NEQ "" (set "package=%%I" & set "fullpath=%%A/%%B/%%C/%%D/%%E/%%F/%%G/%%H")
  for /f "tokens=1,2 delims==" %%a in ('call echo %%package%%') do (
    set "_fullpath=%%a"
    set "package=%%b"
  )
call echo /%%fullpath%%/%%_fullpath%%
)
echo.
pause
exit
1й (test3.cmd) - вроде еще ничего (думаю что крайне маловероятно что в пути дважды попадется ".apk"... хотелось бы заменять ".apk=" на ".apk ", тогда было бы прям отлично, идеальный вариант, но экранировать знак "=" не получилось),
2й - уже сейчас слишком медленный, а по хорошему, наверное, надо еще побольше токенов проверять, на всякий пожарный
...
PS: или все-таки можно провернуть что-то типа set "fullpath=%fullpath:.apk^==.apk %"
...
Ещё пробовал включить ENABLEDELAYEDEXPANSION, задать переменную "var=.apk=" и потом сделать замену:
set "fullpath=%fullpath:!var!=.apk %"
но так не работает

[Цитировать]

    JuraAD
  • 28398
  • Стаж: 3 года 5 месяцев
  • Сообщений: 86
  • Репутация:27

    [+] [-]
cartmenezz, Разбор позже -) То, что ты делаешь - плохо, функции для обработки файловой системы, с того и большие буквы и переформатирование слэжэй...
Попробуй сам разобраться - строки в каталоге скрипта в файле - .test3.txt
Единственное - кавычки в строках - ТАБУ... но это решается заменой на спец.символы... -)))

.test3.cmd

@echo off&setlocal enableextensions enabledelayedexpansion
for /f "tokens=* delims=" %%a in (%~dp0.test3.txt) do call :.find "%%a"
endlocal&exit /b 0
:.find
set "x0=%~1"
set /a "x1=0"
set /a "x2=0"
set /a "x3=0"
:.find_next
call set "x4=%%x0:~!x1!,1%%"
if "!x4!"=="/" set /a "x2=!x1!+1"
if "!x4!"=="=" set /a "x3=!x1!-!x2!"
set /a "x1+=1"
if not "!x4!"=="" goto :.find_next
call set "x5=%%x0:~0,!x2!%%"
call set "x6=%%x0:~!x2!,!x3!%%"
echo "!x0!"
echo "!x1!"
echo "!x2!"
echo "!x3!"
echo "!x4!"
echo "!x5!"
echo "!x6!"
goto :eof

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 9 лет 3 месяца
  • Сообщений: 527
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
JuraAD, aa
100507функции для обработки файловой системы, с того и большие буквы и переформатирование слэжэй...
я просто раньше думал, что только слэши меняются (в 99% так и было)... От этой задумки, я конечно уже отказался.
100507Попробуй сам разобраться
на вид сложновато, но видимо придется)) Благодарю
upd:
Сейчас на работе, вникнуть не успел, но попробовать-попробовал. Работает, но очень медленно... боюсь, для моего сценария это совсем не подходит, но в любом случае спасибо

Страница 84 из 94


Показать сообщения:    

Текущее время: 21-Дек 20:52

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы