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

[其他] [已解决] 批处理for语句多行文本怎样不使用临时文件?

[复制链接]
发表于 2021-8-13 18:31:50 | 显示全部楼层 |阅读模式
本帖最后由 newswan 于 2021-8-15 11:04 编辑
  1. (echo;list vol
  2. echo;list vdisk
  3. echo;list disk
  4. echo;sel disk=0
  5. echo;detail disk
  6. echo;list part
  7. for /l %%a in (1 1 99) do (
  8.         echo;sel disk=next
  9.         echo;detail disk
  10.         echo;list part
  11. ))>"%temp%\dk.tmp"

  12. (for /f "skip=5 delims=" %%Z in ('diskpart /s "%temp%\dk.tmp"') do (echo %%z)
复制代码
请问,有没有办法,不使用临时文件,把多行文本保存在变量中,然后在 for 语句中使用
发表于 2021-8-13 18:52:59 | 显示全部楼层
  1. (set a=list vol
  2. set a=%a%#list vdisk
  3. set a=%a%#list disk
  4. set a=%a%#sel disk=0
  5. set a=%a%#detail disk
  6. set a=%a%#list part
  7. setlocal enabledelayedexpansion
  8. for /l %%a in (1 1 99) do (
  9.         set a=!a!#sel disk=next
  10.         set a=!a!#detail disk
  11.         set a=!a!#list part
  12. ))
  13. set a=%a:#=^^&echo;%
  14. (for /f "skip=5 delims=" %%Z in ('^(echo;%a%^)^|diskpart') do (echo %%z)
复制代码
 楼主| 发表于 2021-8-13 19:55:08 | 显示全部楼层
回复 2# idwma

报错,
  1. >set a=^  & echo;list part^  & echo;list part^  & echo;list part^  & echo;list part^  & echo;list part^  & echo;list part^  & echo;list part^  & echo;sel disk=next^  & echo;detail disk^  & echo;list part^  & echo;sel disk=next^  & echo;detail disk^  & echo;list part
  2. list part^
  3. list part^
  4. list part^
  5. list part^
  6. list part^
  7. list part^
  8. list part^
  9. sel disk=next^
  10. detail disk^
  11. list part^
  12. sel disk=next^
  13. detail disk^
  14. list part
  15. |diskpart was unexpected at this time.
复制代码
 楼主| 发表于 2021-8-13 19:56:41 | 显示全部楼层
用过
  1. setLF=^&echo,
  2. set LF=^


复制代码
没有试出来
发表于 2021-8-13 20:29:57 | 显示全部楼层
不好意思又没有上机测试
  1. set a=list vol
  2. set a=%a%#list vdisk
  3. set a=%a%#list disk
  4. set a=%a%#sel disk=0
  5. set a=%a%#detail disk
  6. set a=%a%#list part
  7. setlocal enabledelayedexpansion
  8. for /l %%a in (1 1 2) do (
  9.         set a=!a!#sel disk=next
  10.         set a=!a!#detail disk
  11.         set a=!a!#list part
  12. )

  13. for /f "skip=5 delims=" %%Z in ('^(echo;%a:#=^&echo;%^)^|diskpart') do (echo %%Z)
复制代码

评分

参与人数 1技术 +1 收起 理由
newswan + 1 乐于助人

查看全部评分

 楼主| 发表于 2021-8-13 20:53:58 | 显示全部楼层
本帖最后由 newswan 于 2021-8-13 21:02 编辑

谢谢,要在执行时替换,以前见过,忘记这点了
 楼主| 发表于 2021-8-14 12:37:43 | 显示全部楼层
本帖最后由 newswan 于 2021-8-14 17:46 编辑

  1. @echo off
  2. setlocal enableDelayedExpansion

  3. set _LF_=^&echo
  4. set _CL_= sel disk 0
  5. set _CL_=!_CL_! !_LF_! detail disk
  6. set _CL_=!_CL_! !_LF_! list part

  7. echo !_CL_!
  8. echo %_CL_%


  9. echo ----1
  10. for /f "usebackq tokens=* delims=" %%Z in (`
  11.     cmd /c "(echo %_CL_%) | diskpart"
  12. `) do (
  13.     echo %%Z
  14. )
  15. echo ----2
  16. for /f "usebackq tokens=* delims=" %%Z in (`
  17.     cmd /c "(echo !_CL_!) | diskpart"
  18. `) do (
  19.     echo %%Z
  20. )

复制代码
找到了以前的
 楼主| 发表于 2021-8-15 11:04:11 | 显示全部楼层
还是这种方式吧,简单易读

  1. set "_CL_= echo list disk & echo sel disk 0 & echo list part"
  2. for /f "usebackq skip=6 tokens=* delims=" %%a in (`cmd /c "%_CL_% | diskpart"`) do (
  3.     echo %%a
  4. )
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 23:33 , Processed in 0.041079 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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