Может ли этот пакетный файл повредить/помешать загрузке Windows 10?

Может ли этот пакетный файл повредить/помешать загрузке Windows 10?

Есть ли в .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. Идея заключается в следующем:
    1. Принять разрешение H:\PVRи все его содержимое
    2. Переместить .tsvзаписи из подпапок, удалив подпапки
    3. Переименовать .tsvрасширения в.ts
    4. Удалить первые 17 символов из имен файлов, так как мне не нравится формат префикса получателя

Как устранить эту неполадку?

решение1

...Затем открылось окно CMD, и я увидел, что обрабатываются имена файлов, которых нет на моем флеш-накопителе, что было подозрительно...

  1. Идти к H::

    cd /d H:\
    

  2. Еслиcd /d H:\возвращает не- 0, оператор выполнит следующую команду после ||, заставив пакетный скрипт перейти в конец файла [ goto :eOf​​], завершив выполнение без действий в других папках/файлах:

    cd /d H:\ || goto :eOf
    

  3. Если последняя команда выполнена успешно, будут выполнены следующие takeownкоманды :icaclsH:

    %__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
    

  4. Вывести список [ 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
    

  5. Для каждой папки в цикле переместить *.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 )
    

  6. Чтобы использовать вновь определенную переменную в той же строке и во время выполнения получить значение, вызовите 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


Дополнительные ресурсы:

Связанный контент