Board logo

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

作者: newswan    时间: 2021-8-13 18:31     标题: [已解决] 批处理for语句多行文本怎样不使用临时文件?

本帖最后由 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 语句中使用
作者: idwma    时间: 2021-8-13 18:52

  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)
复制代码

作者: newswan    时间: 2021-8-13 19:55

回复 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.
复制代码

作者: newswan    时间: 2021-8-13 19:56

用过
  1. setLF=^&echo,
  2. set LF=^
复制代码
没有试出来
作者: idwma    时间: 2021-8-13 20:29

不好意思又没有上机测试
  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)
复制代码

作者: newswan    时间: 2021-8-13 20:53

本帖最后由 newswan 于 2021-8-13 21:02 编辑

谢谢,要在执行时替换,以前见过,忘记这点了
作者: newswan    时间: 2021-8-14 12:37

本帖最后由 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. )
复制代码
找到了以前的
作者: newswan    时间: 2021-8-15 11:04

还是这种方式吧,简单易读
  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. )
复制代码





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