找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 15764|回复: 19

[文本处理] 批处理如何正确读取文件内容,并将内容赋值于变量?

[复制链接]
发表于 2025-4-26 16:55:10 | 显示全部楼层 |阅读模式
例如想读取BV.log这个文件的内容(该文件位于批处理命令文件的同目录内),内容只有一行,并将这个内容赋值给一个名叫BV的变量,并引用这个变量

用AI豆包的输出结果是:空
  1. setlocal enabledelayedexpansion

  2. rem 初始化 BV 变量
  3. set "BV="

  4. rem 读取文件内容到 BV 变量
  5. for /f "usebackq delims=" %%a in ("BV.log") do (
  6.     set "BV=!BV!%%a"
  7. )

  8. rem 引用 BV 变量并输出
  9. echo 读取到的内容为: %BV%

  10. endlocal
复制代码
发表于 2025-4-26 19:04:03 | 显示全部楼层
回复 1# kimycai

必须看看你的 bv.log 文件这一行长啥样?
 楼主| 发表于 2025-4-26 19:10:23 | 显示全部楼层
回复 2# aloha20200628


    BV1h4L9zbE6P
这样的字符串
发表于 2025-4-26 19:35:02 | 显示全部楼层
setlocal enabledelayedexpansion

rem 初始化 BV 变量
set "BV="

rem 读取文件内容到 BV 变量
for /f "usebackq delims=" %%a in ("BV.log") do (
    set "BV=!BV!%%a"
    goto :next
)

:next
rem 引用 BV 变量并输出
echo 读取到的内容为: %BV%

endlocal
 楼主| 发表于 2025-4-26 19:45:04 | 显示全部楼层
setlocal enabledelayedexpansion

rem 初始化 BV 变量
set "BV="

rem 读取文件内容到 BV 变量
for  ...
czjt1234 发表于 2025-4-26 19:35



    还是不行,是不是跟BV.log的文件编码有关?如何在用>输出时更改编码呢
 楼主| 发表于 2025-4-26 19:48:37 | 显示全部楼层
setlocal enabledelayedexpansion

rem 初始化 BV 变量
set "BV="

rem 读取文件内容到 BV 变量
for  ...
czjt1234 发表于 2025-4-26 19:35



    我的批处理第一行是CHCP 65001 ,跟这个是不是有关
发表于 2025-4-26 20:08:34 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. set "BV="
  4. for /f "usebackq delims="eol^= %%a in ("BV.log") do (
  5.     set "BV=%%a"
  6. )
  7. setlocal enabledelayedexpansion
  8. echo [!BV!]
  9. endlocal
  10. pause
复制代码
发表于 2025-4-26 20:29:36 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-4-26 20:33 编辑

回复 3# kimycai

如果 bv.log 仅是一行 ascii 字符串,其文件编码是 ansi 或是 utf-8 都是兼容的,且批处用否 chcp 65001 切换码页并无区别,但会影响批处采用 echo 或 set/p 等输出命令的屏显结果。以下是一楼代码的改写,试试运行结果...

  1. @echo off & for /f "usebackq delims=" %%a in ("BV.log") do (set "BV=%%a")
  2. echo,%BV%
  3. pause&exit/b
复制代码
若仅是读取第一行数据,还可简化为以下版本...

  1. @echo off &set/p BV=<"BV.log"
  2. echo,%BV%
  3. pause&exit/b
复制代码
发表于 2025-4-26 20:36:34 | 显示全部楼层
回复 6# kimycai

如果你实际运行的批处代码不同于一楼代码,那还要看一看你的真实版本?!
 楼主| 发表于 2025-4-26 20:49:16 | 显示全部楼层
回复  kimycai

如果 bv.log 仅是一行 ascii 字符串,其文件编码是 ansi 或是 utf-8 都是兼容的,且批处 ...
aloha20200628 发表于 2025-4-26 20:29



     能屏显了,用的是简化代码,请问这到底什么原因?
 楼主| 发表于 2025-4-26 20:51:51 | 显示全部楼层
77七 发表于 2025-4-26 20:08



    可以,能屏显内容了,谢谢
 楼主| 发表于 2025-4-26 20:53:17 | 显示全部楼层
77七 发表于 2025-4-26 20:08



    那么之前的问题在哪呢,是AI在胡编吗,还是setlocal enabledelayedexpansion要放到后面
发表于 2025-4-26 21:21:04 | 显示全部楼层
回复 12# kimycai


   因为你没有提供真实的文本,3楼应该不是真实文本吧?所以7楼代码尽量把能填的坑全填上,至于1楼代码到底是踩了哪个坑,从10楼的反馈来看,大概率是行首为分号,for /f 默认忽略分号开头的行。
发表于 2025-4-26 21:29:57 | 显示全部楼层
回复 10# kimycai

完整的诊断须知 BV.log 文件的真实内容还有你实际运行的批处版本...
 楼主| 发表于 2025-4-26 21:30:38 | 显示全部楼层
回复  kimycai


   因为你没有提供真实的文本,3楼应该不是真实文本吧?所以7楼代码尽量把能填的坑全填 ...
77七 发表于 2025-4-26 21:21



    就是这么单行的文本,并没有隐藏其他信息
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:23 , Processed in 0.018699 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表