Вы можете использовать встроенную в исполняемом certutil
для преобразования файлов из ASCII в шестнадцатеричный, обрабатывать полученный файл с for /f
циклом, полосой всех экземпляров 0d
(который является символом возврата каретки в шестнадцатеричном формате) из каждой строки и перестроить файл из оставшегося шестнадцатеричного кода. Клянусь, это легче, чем я.
Обратите внимание, что максимальный размер входного файла составляет 71 МБ из-за ограничения с certutil
и что файлы размером более 2 МБ могут потребоваться некоторое время для обработки, но по крайней мере все является родным для Windows, поэтому вы не не нужно ничего устанавливать или изучать совершенно новый язык.
@echo off
setlocal enabledelayedexpansion
:: Ensure a file was passed in
if "%~1"=="" (
echo Please provide a file to process.
pause
exit /b
)
:: Ensure file is under the certutil input limit
if %~z1 GTR 74472684 (
echo This file exceeds the maximum file size of 74472684 bytes ^(71 MB^)
echo Please use a smaller file.
pause
exit /b
)
:make_rand
:: Generate a random number to reduce the risk of filename collision
set rand=%RANDOM%%RANDOM%
set "temp_file=%~dpf1_%rand%.tmp"
set "hex_file=%~dpf1_%rand%.hex"
set "new_file=%~dpf1_new.%~x1"
if exist %temp_file% goto :make_rand
if exist %hex_file% goto :make_rand
if exist %new_file% choice /c:YN /M "%new_file% already exists. Overwrite? "
if %errorlevel% equ 1 del %new_file%
if %errorlevel% equ 2 exit /b
certutil -encodehex "%~1" "%temp_file%"
:: The script will break if you have spaces in your file path.
:: This is a feature, not a bug. Names your paths correctly.
for /f "tokens=1,*" %%A in (%temp_file%) do (
set "line=%%B"
set "hex_substring=!line:~0,48!"
set "no_carriage=!hex_substring:0d=!"
echo !no_carriage! >>%hex_file%
)
certutil -decodehex "%hex_file%" "%new_file%"
:: Temp file cleanup
del /q %hex_file%
del /q %temp_file%
Это, к сожалению, не так, как этот сайт работает, вы предоставляете свой код, и мы поможем вам с ним. Мы не являемся бесплатной службой написания кода. – Compo
Не получится сделать это с чистым [тегом: пакетный файл]. Вы можете сделать это с помощью Vbscript, но для этого потребуется, чтобы весь файл был загружен в память. Каков максимальный размер файла? – Squashman
Они около 7 мб каждый. Как работает Vbscript? Могу ли я просто закодировать все, что я пытаюсь сделать с ним? Я знаю, что пакет устарел, поэтому я готов переместить языки, если это путь. – Charles