【发布时间】:2019-11-08 23:40:43
【问题描述】:
我需要转义“!” (和其他特殊字符)在启用延迟变量扩展的 for 循环中
我尝试使用字符串替换手动转义循环变量^^!在循环变量中, %%a 但根本没有运气。在 for 阅读它们之后是否已经太晚了?如果是这样,我怎么能做到这一点?
下面是一个简短的函数。这里唯一相关的部分是 for 循环和 echo 语句。那就是每 X 行从文件中打印出整行,这些行是文件路径。它们(有时)包含诸如“!”之类的字符和其他麻烦的特殊字符。我只想在这里 echo 传递它而不解释它 - 但它最终会删除我的“!”字符。 对于我的使用,它们需要完全正确,否则它们将毫无用处,因为它们必须与我稍后使用它们的实际文件相关联。
setlocal EnableDelayedExpansion
:SplitList
if [%3] == [] goto :SplitListUsage
set inputfile=%~1
set outputfile=%~2
set splitnumber=%~3
set skipLines=0
set skipLines=%~4
if %skipLines% GTR 0 (
set skip=skip=%skipLines%
) else (
set skip=
)
@echo off > %outputfile%
set lineNumber=0
for /f "tokens=* %skip% delims= " %%a in (%inputfile%) do (
set /a modulo="!lineNumber! %% !splitnumber!"
if "!modulo!" equ "0" (
echo %%a >> !outputfile!
)
set /a lineNumber+=1
)
exit /B 0
【问题讨论】:
标签: batch-file