[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] [已解决] 批处理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 语句中使用

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

TOP

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

TOP

用过
  1. setLF=^&echo,
  2. set LF=^
复制代码
没有试出来

TOP

不好意思又没有上机测试
  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

评分人数

TOP

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

谢谢,要在执行时替换,以前见过,忘记这点了

TOP

本帖最后由 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. )
复制代码
找到了以前的

TOP

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

TOP

返回列表