浏览S.O.我设法拼凑了我的功能,所以它有效,但我不了解它。我基本上试图确保我想要使用的文件中没有双引号。我使用了带有/ m选项的findstr,它返回了文件名。
当我从cmd行运行命令时,它可以使用:
findstr /V /L /m "\"" filename.txt
当filename没有双引号时,它返回文件名,如果它有双引号,则返回blank / null / whatever。正是我想要的。
所以我想使用本网站上的解决方案在变量中捕获此结果。我发现了这个作品:
setlocal enabledelayedexpansion
set test=
for /F %%a in ('findstr /V /L /m ^"^\^"^" filename.txt') do (@set test=!test! %%a)
echo %test%
所以我的问题:我的搜索字符串需要转义,所以来自:
"\""
并成为:
^"^\^"^"
但我不明白为什么要这样做。有人可以解释一下吗?
答案 0 :(得分:1)
要回答您的问题,您的搜索字符串需要转义(^
转义)的原因是......无。在您的情况下,搜索字符串不需要转义。
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "delims=" %%a in ('
findstr /l /m /v "\"" *.txt
') do echo %%a
您需要\"
转义,因为findstr
参数处理(更多here)但^"
scaping不是必需。
但是在某些情况下需要^
引用scaping。在这些情况下转义的原因是for /f
内的命令在单独的cmd
实例中执行。这个已启动的实例可以(或不包含)自己的引用集
cmd /c " ...... "
并且命令中的引号可能会干扰cmd
解析要执行的命令。
但如果你转义引号(cmd
转义,即^"
),它们将不会被解析为结束/打开引号,而是作为一个没有{{1的特殊含义的文字解析器,所以他们以后可能会被打包。