标题: [特效代码] 批处理如何将一行超长的字符串赋值给变量 [打印本页]
作者: 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 应该没问题:- @echo off
- for %%a in (test.txt) do set /a n=%%~za/1023+1
- (for /l %%a in (1 1 %n%) do set /p str%%a=)<test.txt
- ::将 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 |