小编Cmd*_*ion的帖子

逃逸百分比符号给定变量

我的第一篇文章,大多数问题已经使用这里友好提供的知识解决了.但是现在我的想法已经用完了,还有一个关于在cmd.exe中处理毒物字符的问题.

假设有一个用双引号括起来的给定字符串变量.大多数毒药角色之前已经被常见的字符替换,左边的那些扰乱脚本的是"&","(",")"和"%".之后,字符串必须回显到没有引号的文件.所以我有想法逃脱毒性三倍:

@echo off & setlocal ENABLEEXTENSIONS
SET AlbumArtist=%1
CALL :EscapePoisonChars %AlbumArtist% AlbumArtist_VDN

SET "FlacHyperLink==hyperlink^("file://%AlbumArtist_VDN%"^;"LossLess"^)")
echo %FlacHyperLink%
echo %AlbumArtist_VDN%

endlocal &GOTO:EOF

:EscapePoisonChars
@echo off & setlocal ENABLEEXTENSIONS
SET TmpString=%1
SET TmpString=%TmpString:&=^^^&%
SET TmpString=%TmpString:(=^^^(%
SET TmpString=%TmpString:)=^^^)%
endlocal&SET %2=%TmpString:~1,-1%&GOTO :EOF
Run Code Online (Sandbox Code Playgroud)

当我在上面调用我的脚本时,我得到了预期的输出 - 除了缺少百分号:

G:\YAET\20130204_Work>TryAmper.bat "100% Rock & Roll (7' UpMix)"
=hyperlink("file://100 Rock & Roll (7' UpMix)";"LossLess")
100 Rock & Roll (7' UpMix)

G:\YAET\20130204_Work>
Run Code Online (Sandbox Code Playgroud)

我知道这个百分比可以自己逃脱.所以"%%"通常会导致单个文字"%".但是我找不到百分号的工作替换程序是不可能的,因为cmd总是将它解释为变量并尝试扩展它.这是处理这个问题的完全错误的方向还是只是对变量扩展的误解?任何提示都欢迎!谢谢!

干杯,马丁

编辑 删除自己的代码,见下面Jeb对清洁解决方案的回答.

谢谢你的帮助,马丁

windows cmd escaping batch-file

5
推荐指数
1
解决办法
4891
查看次数

Cmd和感叹号 - 第二部分

我真的想知道为什么我的字符串替换过程在解析包含任何特殊字符(包括感叹号)的文本文件时有效.我预计延迟变量扩展会关闭&符号,百分号等的特殊含义,但会因感叹号而失败...

码:

@echo on & setlocal ENABLEEXTENSIONS

set "InFile=%~1"
set "OutFile=%~2"
set "Replace=%~3"

CALL :ParseCue "%%InFile%%" "%%OutFile%%" "%%Replace%%"

endlocal &GOTO:EOF

:ParseCue
@echo on & setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
set "FileToParse=%~1"
set "OutputFile=%~2"
set "NewExtension=%~3"
for /F "usebackq tokens=* delims=" %%a in ("%FileToParse%") DO (
  set "line=%%a"
  @echo on & setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
  set "line=!line:.wav=%NewExtension%!"
  echo(!line!>>"%OutputFile%"
  endlocal
)
endlocal &GOTO:EOF
Run Code Online (Sandbox Code Playgroud)

InputFile.txt:

This a test for parsing lines with special characters
Rock & Roll.wav
Rock & Roll!.wav
Special | < > ~ \ …
Run Code Online (Sandbox Code Playgroud)

windows cmd batch-file delayedvariableexpansion

3
推荐指数
1
解决办法
9762
查看次数

cmd和感叹号

对于包含感叹号的文件夹名称,以下代码失败.我想我需要启用DelayedExpansion来处理嵌套的for循环.任何想法让这项工作?谢谢!

@echo off & setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

set "dest=%~dpn1"
IF "%1" equ "" Set "dest=%cd%"

set /a Folders=0
set /a FoldersWithSubFoldersAndFiles=0
set /a FoldersWithOnlyFiles=0
set /a FoldersWithOnlySubFolders=0
set /a FoldersEmpty=0

for /f "usebackq tokens=*" %%a in (`DIR /AD /S /B "%dest%"`) do (
    Set /a Folders+=1
    for /f "usebackq tokens=*" %%i in (`DIR "%%a" /A-D /B 2^>NUL^| FIND /C /V ""`) do (
        Set NumberOfFiles=%%i
    )
    for /f "usebackq tokens=*" %%i in (`DIR "%%a" /AD /B 2^>NUL^| FIND /C /V …
Run Code Online (Sandbox Code Playgroud)

windows cmd batch-file delayedvariableexpansion

1
推荐指数
1
解决办法
513
查看次数