Есть ли в .bat
скрипте ниже что-либо, что может удалить/повредить системные файлы Windows 10 и помешать их запуску, вызывая цикл загрузки? После перезагрузки, после выполнения .bat
, Windows не запускается и выдает Critical Service Failed
:
- Я запустил
.bat
как администратор, как с флэш-накопителя, так и изC:
, и открыл терминал Cmd с именами файлов, которыенетна обрабатываемой флешке, что было подозрительно:
Я составил этот скрипт, объединив несколько команд, найденных здесь и в других местах, для обработкиtakeown /f "H:\PVR" /r icacls "H:\PVR" /reset /t for /r "H:\PVR" %%i in (*.ts *.tsv) do move "%%i" "H:\PVR" cd /d "H:\PVR" ren *.tsv *.ts for /f "delims=" %%d in ('dir /ad /b') do @rd /q /s "%%d" setlocal EnableDelayedExpansion for %%a in (*.ts *.tsv) do ( set name=%%~Na set num=00!random! set newName=!!name:~-17! ren "%%a" "!newName!%%~Xa" )
.ts
записей на флэш-накопителе с моего приемника DVBT-T2. Идея заключается в следующем:- Принять разрешение
H:\PVR
и все его содержимое - Переместить
.tsv
записи из подпапок, удалив подпапки - Переименовать
.tsv
расширения в.ts
- Удалить первые 17 символов из имен файлов, так как мне не нравится формат префикса получателя
- Принять разрешение
Как устранить эту неполадку?
решение1
...Затем открылось окно CMD, и я увидел, что обрабатываются имена файлов, которых нет на моем флеш-накопителе, что было подозрительно...
Идти к
H:
:cd /d H:\
Если
cd /d H:\
возвращает не-0
, оператор выполнит следующую команду после||
, заставив пакетный скрипт перейти в конец файла [goto :eOf
], завершив выполнение без действий в других папках/файлах:cd /d H:\ || goto :eOf
Если последняя команда выполнена успешно, будут выполнены следующие
takeown
команды :icacls
H:
%__AppDir__%takeown.exe /f H:\PVR\. /r %__AppDir__%icacls.exe H:\PVR\. /reset /t
Для
takeown
иicals
команды, используйте паузу, чтобы увидеть экран::: # One space before ^ and no space and/or another character after ^ : %__AppDir__%takeown.exe /f .\PVR\. /r | <nul ^ %__AppDir__%Findstr.exe "(or.*):" & %__AppDir__%timeout.exe /t -1 %__AppDir__%icacls.exe .\PVR\. /reset /t | <nul ^ %__AppDir__%Find.exe "files; Fai" & %__AppDir__%timeout.exe /t -1
Чтобы удалить тайм-аут:
%__AppDir__%takeown.exe /f .\PVR\. /r && %__AppDir__%icacls.exe .\PVR\. /reset /t
Вывести список [
Sort
] папок/деревьев в обратном режиме [/r
], чтобы получить последнюю подпапку/каталог в дереве каталогов и, где это возможно, переместить файлы и удалить текущий каталог:for /f usebacktokens^=* %i in (`dir /b /s /ad-h H:\PVR\.^|%__AppDir__%Sort.exe /r
$ Dir /b /s /ad-h D:\PVR|%__AppDir__%Sort.exe /r H:\PVR\tmp H:\PVR\Dir 003\tmp H:\PVR\Dir 003 H:\PVR\Dir 002\tmp H:\PVR\Dir 002 H:\PVR\Dir 001\tmp H:\PVR\Dir 001 H:\PVR\Dir 000\tmp H:\PVR\Dir 000
Для каждой папки в цикле переместить
*.ts?
файлы, применяя к*.ts
и*.tsv
файлы внутри\PVR\.
; если не происходит ошибок [файл/папка используется и т. д.], удалить папку, в противном случае переименовать файлы: (.\PVR\*.tsv
→*.ts
)move "%%~fi\*.ts?" H:\PVR\ && rd "%%~fi" && rename H:\PVR\*.tsv *.ts move "%%~fi\*.ts?" H:\PVR\ if return 0 do: rd "%%~fi" && if return 0 do: rename H:\PVR\*.tsv *.ts
Где, как я предполагаю, нет других
*.ts
файлы в папках и вам необходимо удалить эту папку [@rd /q /s "%%d"
]; если это не так, замените последние строки на:for /f usebacktokens^=* %%i in (`Dir /b /s /ad-h H:\PVR^|%__AppDir__%Sort.exe /r `)do ( move "%%~fi\*.tsv" D:\PVR\. && move "%%~fi\*.ts" H:\PVR\. ) && ( rmDir /s /q "%%~fi" && rename D:\PVR\*.tsv *.ts )
Чтобы использовать вновь определенную переменную в той же строке и во время выполнения получить значение, вызовите
cmd /v /c !Newly defined variable!
; это то, что делается для переименования файлов, ограничивая длину имени максимум 17 символами в!_new:~-17!
(то же, что и последние 17 символов)set "_new=%%~ni" && in the same line use: cmd.exe /v:on /c rename "%%~fi" "!_new:~-17!%%~xi"
- Лично я предпочитаю использовать
where
для простоты возврата полного пути к файлам; в отличие отdir /b
, он не отображает строки в нижнем регистре:for /f useback^tokens^=* %%i in (`2^>nul %__AppDir__%where.exe "H:\PVR":"*.ts*" `)do set "_new=%%~ni" && cmd.exe /v:on /c rename "%%~fi" "!_new:~-17!%%~xi"
- Я добавил
useback
(сокращенноusebackq
) чтобы избежать неожиданного поведения, если в имени файла/пути могут присутствовать какие-либо специальные символы, даже если они не были опубликованы строки/макет, составляющие имена файлов
- Лично я предпочитаю использовать
Для перемещения/переименования файлов:
@echo off
cd /d H:\.. || goto :eof
setlocal Enabledelayedexpansion
%__AppDir__%takeown.exe /f .\PVR\. /r | <nul ^
%__AppDir__%Findstr.exe "(or.*):" & %__AppDir__%timeout.exe /t -1
%__AppDir__%icacls.exe .\PVR\. /reset /t | <nul ^
%__AppDir__%Find.exe "files;.Fa" & %__AppDir__%timeout.exe /t -01
for /f usebacktokens^=* %%i in (`Dir /b /s /ad-h H:\PVR^|%__AppDir__%Sort.exe /r
`)do move "%%~fi\*.ts?" H:\PVR\ && rd "%%~fi" && rename H:\PVR\*.tsv *.ts
for /f useback^tokens^=* %%i in (`2^>nul %__AppDir__%where.exe "H:\PVR":"*.ts*"
`)do set "_new=%%~ni" && cmd.exe /v:on /c rename "%%~fi" "!_new:~-17!%%~xi"
endlocal & %__AppDir__%timeout.exe /t -1 | echo\iS dONE! & goto :eof || exit /b
- Выход:
H:\PVR\tmp\F0HZCERYIEYKY--U0O69.ts H:\PVR\tmp\4-W5N0-6QDOWYAS-YYW-.ts H:\PVR\tmp\-PD2MDWHFIL5VP0DWCN8.tsv H:\PVR\tmp\SZAAC--91GQCH7OD9-0P.tsv 4 file(s) moved. Removed: "H:\PVR\tmpi" Moved: tmp\*.ts? H:\PVR\Dir 000\tmp\I9aKTe38uRqcmkh2B7GF.ts H:\PVR\Dir 000\tmp\BBPcfN7R9jg1ESsgHsnA.ts H:\PVR\Dir 000\tmp\FRAEKeG1HnMZTmBpY6CB.tsv H:\PVR\Dir 000\tmp\EHuI3OiwSRGZWg7fsxsT.tsv 4 file(s) moved. Removed: "H:\PVR\Dir 000\tmpi" Moved: tmp\*.ts? H:\PVR\Dir 001\tmp\HZH4jcvj2GvQzf7og5h3.ts H:\PVR\Dir 001\tmp\EHRR1jKp3owr4lIsZZre.ts H:\PVR\Dir 001\tmp\1c0sB7o881uCGiYZUnvh.tsv H:\PVR\Dir 001\tmp\PnDUHnrCAGeUB3RRnwF5.tsv 4 file(s) moved. Removed: "H:\PVR\Dir 001\tmpi" Moved: tmp\*.ts? H:\PVR\Dir 002\tmp\nqRuQhA9WrXvPk7i2ywt.ts H:\PVR\Dir 002\tmp\7b4hGoKaA9HxiSXtbpAT.ts H:\PVR\Dir 002\tmp\Y6PbfweT6aSgDiDDCVdU.tsv H:\PVR\Dir 002\tmp\qvnIDtkY7uKtfcgStHzq.tsv 4 file(s) moved. Removed: "H:\PVR\Dir 002\tmpi" Moved: tmp\*.ts? H:\PVR\Dir 003\tmp\wnAVPzdos4RWjrJTt9cr.ts H:\PVR\Dir 003\tmp\EXDlfbAqCyfB23l7ZZHz.ts H:\PVR\Dir 003\tmp\lgAduikvz4vlF1PWA892.tsv H:\PVR\Dir 003\tmp\JcBmygrENpU4kEOOIFqP.tsv 4 file(s) moved. Removed: "H:\PVR\Dir 003\tmpi" Moved: tmp\*.ts? H:\PVR\Dir 000\SvRxVxF6ZDr7a8R5F9z5.ts H:\PVR\Dir 000\1tZDpWwpCVNqrxwr993C.ts H:\PVR\Dir 000\BXKSG8q0vo3bXCgaNr7K.tsv H:\PVR\Dir 000\qtPe80WQRRrms1Iga1i3.tsv 4 file(s) moved. Removed: "H:\PVR\Dir 000i" Moved: Dir 000\*.ts? H:\PVR\Dir 001\NXGbTP1AlPxJGRPWaUJx.ts H:\PVR\Dir 001\Q2Eq97QpY7XQ7reWjUMi.ts H:\PVR\Dir 001\UEAkSw76WV9j0494Lpvv.tsv H:\PVR\Dir 001\IFBoWCY483HQE94fpCHU.tsv 4 file(s) moved. Removed: "H:\PVR\Dir 001i" Moved: Dir 001\*.ts? H:\PVR\Dir 002\4nSfuQtqqOF6rPrs9TKb.ts H:\PVR\Dir 002\iNEIDXVdvKkN7abkFZJj.ts H:\PVR\Dir 002\ygWGThdkefADZpMKWq30.tsv H:\PVR\Dir 002\GLLcbLS8QZngJSDfM9k4.tsv 4 file(s) moved. Removed: "H:\PVR\Dir 002i" Moved: Dir 002\*.ts? H:\PVR\Dir 003\i1wW84pUm5TEGCWTueFw.ts H:\PVR\Dir 003\N7s3dLHI5QzdrkGZJJju.ts H:\PVR\Dir 003\T1lQu7bcvmQepdh8iVzp.tsv H:\PVR\Dir 003\izNYHYHzFf4moJZPcOJv.tsv 4 file(s) moved. Removed: "H:\PVR\Dir 003i" Moved: Dir 003\*.ts?
$ where /r .\PVR *.*
H:\PVR\YHYHzFf4moJZPcOJv.ts
H:\PVR\I51RPV68L-6MKLEHV.ts
H:\PVR\-IE2WZ5MGZ0NOYAC8.ts
H:\PVR\MYVS0GIQKLSZ99-PI.ts
H:\PVR\1WMI4-W-0DH2C9V9O.ts
H:\PVR\ZCERYIEYKY--U0O69.ts
H:\PVR\5N0-6QDOWYAS-YYW-.ts
H:\PVR\2MDWHFIL5VP0DWCN8.ts
H:\PVR\AC--91GQCH7OD9-0P.ts
H:\PVR\KTe38uRqcmkh2B7GF.ts
H:\PVR\cfN7R9jg1ESsgHsnA.ts
H:\PVR\EKeG1HnMZTmBpY6CB.ts
H:\PVR\I3OiwSRGZWg7fsxsT.ts
H:\PVR\4jcvj2GvQzf7og5h3.ts
H:\PVR\R1jKp3owr4lIsZZre.ts
H:\PVR\sB7o881uCGiYZUnvh.ts
H:\PVR\UHnrCAGeUB3RRnwF5.ts
H:\PVR\uQhA9WrXvPk7i2ywt.ts
H:\PVR\hGoKaA9HxiSXtbpAT.ts
H:\PVR\bfweT6aSgDiDDCVdU.ts
H:\PVR\IDtkY7uKtfcgStHzq.ts
H:\PVR\VPzdos4RWjrJTt9cr.ts
H:\PVR\lfbAqCyfB23l7ZZHz.ts
H:\PVR\duikvz4vlF1PWA892.ts
H:\PVR\mygrENpU4kEOOIFqP.ts
H:\PVR\xVxF6ZDr7a8R5F9z5.ts
H:\PVR\DpWwpCVNqrxwr993C.ts
H:\PVR\SG8q0vo3bXCgaNr7K.ts
H:\PVR\e80WQRRrms1Iga1i3.ts
H:\PVR\bTP1AlPxJGRPWaUJx.ts
H:\PVR\q97QpY7XQ7reWjUMi.ts
H:\PVR\kSw76WV9j0494Lpvv.ts
H:\PVR\oWCY483HQE94fpCHU.ts
H:\PVR\fuQtqqOF6rPrs9TKb.ts
H:\PVR\IDXVdvKkN7abkFZJj.ts
H:\PVR\GThdkefADZpMKWq30.ts
H:\PVR\cbLS8QZngJSDfM9k4.ts
H:\PVR\W84pUm5TEGCWTueFw.ts
H:\PVR\3dLHI5QzdrkGZJJju.ts
H:\PVR\Qu7bcvmQepdh8iVzp.ts
is done!
Чтобы воспроизвести мой тестовый сценарий для приведенного выше кода, возьмите бесплатный флэш-накопитель и замените соответствующую букву диска:
@echo off
cd /d H:\.. || goto :eof
setlocal Enabledelayedexpansion
:: # create folder for sample/test...
:: # H:\
:: # \---PVR
:: # +---tmp
:: # +---Dir 000
:: # | \---tmp
:: # +---Dir 001
:: # | \---tmp
:: # +---Dir 002
:: # | \---tmp
:: # \---Dir 003
:: # | \---tmp
:: # make folders ".\PVR\tmp\." and ".\PVR\Dir 000\tmp\."
mkdir ".\PVR\tmp\." ".\PVR\Dir 000\tmp\."
:: # make folders ".\PVR\Dir 001\tmp\." and ".\PVR\Dir 002\tmp\." and ".\PVR\Dir 003\tmp\."
mkdir ".\PVR\Dir 001\tmp\." ".\PVR\Dir 002\tmp\." ".\PVR\Dir 003\tmp\."
:: # Dir /b /s /ad-h /o-d outputs:
:: # H:\PVR
:: # H:\PVR\tmp
:: # H:\PVR\Dir 000
:: # H:\PVR\Dir 001
:: # H:\PVR\Dir 002
:: # H:\PVR\Dir 003
:: # H:\PVR\Dir 000\tmp
:: # H:\PVR\Dir 001\tmp
:: # H:\PVR\Dir 002\tmp
:: # H:\PVR\Dir 003\tmp
:: # Show folder the tree/dir created above and list folders
%__AppDir__%tree.com /a /f .
%__AppDir__%Timeout.exe -1 | dir /b /s /ad-h /o-d
echo\UD5I51RPV68L-6MKLEHV.ts >".\PVR\UD5I51RPV68L-6MKLEHV.ts"
echo\5F5-IE2WZ5MGZ0NOYAC8.ts >".\PVR\5F5-IE2WZ5MGZ0NOYAC8.ts"
echo\UY6MYVS0GIQKLSZ99-PI.tsv >".\PVR\UY6MYVS0GIQKLSZ99-PI.tsv"
echo\QA01WMI4-W-0DH2C9V9O.tsv >".\PVR\QA01WMI4-W-0DH2C9V9O.tsv"
echo\F0HZCERYIEYKY--U0O69.ts >".\PVR\tmp\F0HZCERYIEYKY--U0O69.ts"
echo\4-W5N0-6QDOWYAS-YYW-.ts >".\PVR\tmp\4-W5N0-6QDOWYAS-YYW-.ts"
echo\-PD2MDWHFIL5VP0DWCN8.tsv >".\PVR\tmp\-PD2MDWHFIL5VP0DWCN8.tsv"
echo\SZAAC--91GQCH7OD9-0P.tsv >".\PVR\tmp\SZAAC--91GQCH7OD9-0P.tsv"
echo\SvRxVxF6ZDr7a8R5F9z5.ts >".\PVR\Dir 000\SvRxVxF6ZDr7a8R5F9z5.ts"
echo\1tZDpWwpCVNqrxwr993C.ts >".\PVR\Dir 000\1tZDpWwpCVNqrxwr993C.ts"
echo\BXKSG8q0vo3bXCgaNr7K.tsv >".\PVR\Dir 000\BXKSG8q0vo3bXCgaNr7K.tsv"
echo\qtPe80WQRRrms1Iga1i3.tsv >".\PVR\Dir 000\qtPe80WQRRrms1Iga1i3.tsv"
echo\I9aKTe38uRqcmkh2B7GF.ts >".\PVR\Dir 000\tmp\I9aKTe38uRqcmkh2B7GF.ts"
echo\BBPcfN7R9jg1ESsgHsnA.ts >".\PVR\Dir 000\tmp\BBPcfN7R9jg1ESsgHsnA.ts"
echo\FRAEKeG1HnMZTmBpY6CB.tsv >".\PVR\Dir 000\tmp\FRAEKeG1HnMZTmBpY6CB.tsv"
echo\EHuI3OiwSRGZWg7fsxsT.tsv >".\PVR\Dir 000\tmp\EHuI3OiwSRGZWg7fsxsT.tsv"
echo\NXGbTP1AlPxJGRPWaUJx.ts >".\PVR\Dir 001\NXGbTP1AlPxJGRPWaUJx.ts"
echo\Q2Eq97QpY7XQ7reWjUMi.ts >".\PVR\Dir 001\Q2Eq97QpY7XQ7reWjUMi.ts"
echo\UEAkSw76WV9j0494Lpvv.tsv >".\PVR\Dir 001\UEAkSw76WV9j0494Lpvv.tsv"
echo\IFBoWCY483HQE94fpCHU.tsv >".\PVR\Dir 001\IFBoWCY483HQE94fpCHU.tsv"
echo\HZH4jcvj2GvQzf7og5h3.ts >".\PVR\Dir 001\tmp\HZH4jcvj2GvQzf7og5h3.ts"
echo\EHRR1jKp3owr4lIsZZre.ts >".\PVR\Dir 001\tmp\EHRR1jKp3owr4lIsZZre.ts"
echo\1c0sB7o881uCGiYZUnvh.ts >".\PVR\Dir 001\tmp\1c0sB7o881uCGiYZUnvh.tsv"
echo\PnDUHnrCAGeUB3RRnwF5.tsv >".\PVR\Dir 001\tmp\PnDUHnrCAGeUB3RRnwF5.tsv"
echo\4nSfuQtqqOF6rPrs9TKb.tv >".\PVR\Dir 002\4nSfuQtqqOF6rPrs9TKb.ts"
echo\iNEIDXVdvKkN7abkFZJj.tv >".\PVR\Dir 002\iNEIDXVdvKkN7abkFZJj.ts"
echo\ygWGThdkefADZpMKWq30.tsv >".\PVR\Dir 002\ygWGThdkefADZpMKWq30.tsv"
echo\GLLcbLS8QZngJSDfM9k4.tsv >".\PVR\Dir 002\GLLcbLS8QZngJSDfM9k4.tsv"
echo\nqRuQhA9WrXvPk7i2ywt.ts >".\PVR\Dir 002\tmp\nqRuQhA9WrXvPk7i2ywt.ts"
echo\7b4hGoKaA9HxiSXtbpAT.ts >".\PVR\Dir 002\tmp\7b4hGoKaA9HxiSXtbpAT.ts"
echo\Y6PbfweT6aSgDiDDCVdU.tsv >".\PVR\Dir 002\tmp\Y6PbfweT6aSgDiDDCVdU.tsv"
echo\qvnIDtkY7uKtfcgStHzq.tsv >".\PVR\Dir 002\tmp\qvnIDtkY7uKtfcgStHzq.tsv"
echo\i1wW84pUm5TEGCWTueFw.ts >".\PVR\Dir 003\i1wW84pUm5TEGCWTueFw.ts"
echo\N7s3dLHI5QzdrkGZJJju.ts >".\PVR\Dir 003\N7s3dLHI5QzdrkGZJJju.ts"
echo\T1lQu7bcvmQepdh8iVzp.tsv >".\PVR\Dir 003\T1lQu7bcvmQepdh8iVzp.tsv"
echo\izNYHYHzFf4moJZPcOJv.tsv >".\PVR\Dir 003\izNYHYHzFf4moJZPcOJv.tsv"
echo\wnAVPzdos4RWjrJTt9cr.ts >".\PVR\Dir 003\tmp\wnAVPzdos4RWjrJTt9cr.ts"
echo\EXDlfbAqCyfB23l7ZZHz.ts >".\PVR\Dir 003\tmp\EXDlfbAqCyfB23l7ZZHz.ts"
echo\lgAduikvz4vlF1PWA892.tsv >".\PVR\Dir 003\tmp\lgAduikvz4vlF1PWA892.tsv"
echo\JcBmygrENpU4kEOOIFqP.tsv >".\PVR\Dir 003\tmp\JcBmygrENpU4kEOOIFqP.tsv"
:: # put a copy from outputs [tree]+[dir] into the clipboard and exit
(dir /b /s /ad-h /o-d & %__AppDir__%tree.com /a /f . ) | %__AppDir__%clip.exe
endlocal & goto :eof
Дополнительные ресурсы:
Where
For /?
For /F
Dir /?
Tree /?
Findstr
Move /?
- Перенаправление
|
,<
,>
,2>
, и т. д.
- Недокументированные переменные:
- Как интерпретатор команд Windows [
cmd.exe
] анализирует скрипты