[英]Split file in half to two new text files (command line/batch file)
我生成了一个带有证书信息的文本文件,并试图将其分成两半,以便将文本的前半部分保存到密钥文件中,并将另一半保存到证书文件中。 我能够使用
more +7 cert.txt > cert.crt
将下半部分保存到新的证书文件中,但是正在努力将上半部分保存到新的密钥文件中。
这是通过批处理脚本完成的,该批处理脚本可以远程发送到Windows计算机并在Windows计算机上执行,因此只需使用Windows中的内置命令即可完成。
例:
-----BEGIN PRIVATE KEY-----
sample key data
sample key data
sample key data
sample key data
sample key data
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
sample cert data
sample cert data
sample cert data
sample cert data
sample cert data
-----END CERTIFICATE-----
您可以使用findstr /N
在从文件cert.txt
读取的每一行之前加上其行号,冒号和for /F
循环以遍历这些扩展行。 然后,您可以根据当前行号将每行(删除了前缀)重定向到相应的输出文件中:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "FULLFILE=cert.txt" & rem // (combined input file)
set "KEY_FILE=cert.key" & rem // (output key file)
set "CERTFILE=cert.crt" & rem // (output certificate file)
set "KEYLINES=7" & rem // (number of lines that belong to key file)
set "CERTLINE=" & rem // (first line of text belonging to cert. file)
if not defined KEYLINES set /A "KEYLINES=(1<<31)-1"
for /F "delims=" %%L in ('
findstr /N /R "^" "%FULLFILE%" ^& ^
^> "%KEY_FILE%" break ^& ^
^> "%CERTFILE%" break
') do (
set "LINE=%%L"
set /A "LNUM=LINE"
setlocal EnableDelayedExpansion
if defined CERTLINE (
if "!LINE:*:=!"=="!CERTLINE!" (
endlocal
set /A "KEYLINES=0"
setlocal EnableDelayedExpansion
)
)
if !LNUM! LEQ !KEYLINES! (
>> "!KEY_FILE!" echo(!LINE:*:=!
) else (
>> "!CERTFILE!" echo(!LINE:*:=!
)
endlocal
)
endlocal
exit /B
您可以通过两种方式配置此脚本:
KEYLINES
设置为属于密钥文件的行数( 7
),以便将行数输出到密钥文件,并将所有其他行输出到证书文件; 在这种情况下, CERTLINE
应该为空。 CERTLINE
设置为属于证书文件( -----BEGIN CERTIFICATE-----
)的第一行,以便将这些行输出到密钥文件,直到一行与该字符串匹配为止,在这种情况下,此行以及所有进一步的输出到证书文件; KEYLINES
应该为空。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.