windows - 怎么逃!在变量的值中?

标签 windows batch-file cmd escaping

我怎样才能逃脱嵌入式!延迟扩展 !PL! 中使用的变量 PL 的值中的字符,这样它们就不会被解释为分隔符?

例如当 %%P 包含 ! .

FOR %%P IN (%input%\*.M3U) DO (
    echo Processing playlist "%%P"

    SETLOCAL ENABLEDELAYEDEXPANSION
    FOR /F "tokens=*" %%L IN ('type "%%P"') DO (
      SET PL=%%~pP%%L
      echo  Processing reference "!PL!"
    )
  ENDLOCAL
)

编辑:Paul 的有限适用性解决方法:

FOR %%P IN (%input%\*.M3U) DO (
    echo Processing playlist "%%P"

    FOR /F "tokens=*" %%L IN ('type "%%P"') DO (
      SET PL=%%~pP%%L
      SETLOCAL ENABLEDELAYEDEXPANSION
      echo  Processing reference "!PL!"
      ENDLOCAL
    )
)

最佳答案

我不知道如何在 !var! 中搜索/替换 ! (!myvar:^^!=! ! 不起作用) 但您可以在 var 中显示 !,例如:

@echo off
(
echo !!myfolder
echo myfi!es
echo !234
)>sample.txt
for /f %%a in (sample.txt) do (
  set "myvar=%%a"
  setlocal enabledelayedexpansion
  echo !myvar!
  endlocal
)

您可以像这样转置您的代码:

for %%p in (%input%\*.m3u) do (
    echo processing playlist "%%p"

    for /f "tokens=*" %%l in ('type "%%p"') do (
      set pl=%%~pp%%l
      setlocal enabledelayedexpansion
      echo  processing reference "!pl!"
      endlocal
    )
)

关于windows - 怎么逃!在变量的值中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32939109/

相关文章:

php - MySQL 命令行客户端问题 + 错误 2003

windows - 拦截窗口试图窃取 Windows 的全局焦点

windows - 如果错误级别不为零,如何在批处理文件中执行命令?

Windows Batch - 如何修改文件并仅保留以 "<?xml"开头并以 "</testsuites>"结尾的子字符串?

c# - 使用 C# 和参数运行 cmd

java - 为什么应用程序完成后 java 进程没有关闭?

cmd - ffmpeg encode tiff to h265- error 必须指定至少一个输出文件

c# - 在 Windows 窗体上绘制多个自定义矩形控件的最快方法是什么

c# - 从 linq 查询突出显示 ListView 中的文本

windows - 按文件夹层次结构重命名文件