Board logo

标题: [特效代码] 批处理如何将一行超长的字符串赋值给变量 [打印本页]

作者: zzh200510803    时间: 2012-7-3 19:30     标题: 批处理如何将一行超长的字符串赋值给变量

本帖最后由 pcl_test 于 2016-11-26 01:48 编辑

试过很多方法还是不能把一个大文件放入一个变量中,这里所说的大文件不分行,只有一行。
        
        set /p Mstr=<text.txt 只能把大文件text.txt中的一部分存到Mstr里面去。
        
        之前在论坛看到使用管道可以把文件存到变量里去,结果自己试了一下:
        setlocal enabledelayedexpansion
        set Mstr1=
        set Mstr2=
        type text.txt | cmd /v /c "set /p Mstr1=&set Mstr1&set /p Mstr2=&set Mstr2"
        echo %Mstr1%
        echo %Mstr2%
        结果发现Mstr1里存了text.txt一部分,Mstr2里存了text.txt接下来的一部分,但是后面两个打印都打不出来,
可能有内容的两个变量是子进程里的,父进程里这两个变量还是空的。

       请各位大神帮帮手看看怎么弄,本人菜鸟一个。
作者: CrLf    时间: 2012-7-3 19:35

本帖最后由 CrLf 于 2012-7-6 22:08 编辑

set /p 获得的输入长度上限为 1024 字节,通过 for /f + set 获取的变量长度上限为 变量名+等号+变量值+变量分隔符00 这四项的字符串长度相加最多 8192 字符。
若要支持超长行,请用 set /p 模拟数组来分段保存文本内容,或者干脆用 vbs 等支持上亿长度字符串的语言。
作者: zzh200510803    时间: 2012-7-4 08:46

版主你好,我也有想过用for /f + set来获取,但是得到的数据保存不下来,运行后变量还是空的
作者: CrLf    时间: 2012-7-4 11:26

回复 3# zzh200510803


    那用 for + set /p 应该没问题:
  1. @echo off
  2. for %%a in (test.txt) do set /a n=%%~za/1023+1
  3. (for /l %%a in (1 1 %n%) do set /p str%%a=)<test.txt
  4. ::将 test.txt 的内容以 1023~1024 字节分段,保存于模拟的数组 str(n)
复制代码

作者: zzh200510803    时间: 2012-7-6 17:08

谢谢版主,终于弄好了
作者: poter    时间: 2012-7-6 21:16

回复 2# CrLf


    学习了,平日里虽然也知道set /p和变量有存储限制,但却不知道具体是多少,谢谢大侠!




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2