繁体   English   中英

将文件分成两个新的文本文件(命令行/批处理文件)

[英]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

您可以通过两种方式配置此脚本:

  1. KEYLINES设置为属于密钥文件的行数( 7 ),以便将行数输出到密钥文件,并将所有其他行输出到证书文件; 在这种情况下, CERTLINE应该为空。
  2. CERTLINE设置为属于证书文件( -----BEGIN CERTIFICATE----- )的第一行,以便将这些行输出到密钥文件,直到一行与该字符串匹配为止,在这种情况下,此行以及所有进一步的输出到证书文件; KEYLINES应该为空。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM