- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
for /f "delims=" %%a in ('"%systemRoot%\system32\find.exe" /?') do @echo %%a
是的,上一行有效。没有多大用处,但有效。但是尝试写一个批处理文件来回答另一个问题,我遇到了类似的事情
for /f %%a in ('"%systemRoot%\system32\find.exe" /c /v "" ^< "c:\something.txt"') do @echo %%a
for /f %%a in ('"%systemRoot%\system32\find.exe" /c /v "" "c:\something.txt"') do @echo %%a
前面两行都返回The filename, directory name, or volume label syntax is incorrect
for /f %%a in ('"%systemRoot%\system32\find.exe" /c /v "" ^< c:\something.txt' ) do @echo %%a
for /f %%a in ('"%systemRoot%\system32\find.exe" /c /v "" c:\something.txt' ) do @echo %%a
前面两行都返回系统找不到指定的文件
我一直无法让它工作,既没有转义引号,也没有加倍引号,前面有反斜杠,将单引号更改为反引号并在 for
命令中设置相应的选项,所有组合我试过失败了。
如果要运行的命令被引用并且它接受引用的参数,它将失败。
是的,我知道 find
周围的引号是不需要的,如果删除,前四行中的任何一行都可以工作(忽略输出、delims、标记)
但是如果确实需要命令周围的引号(并且我知道系统禁用了 8dot3name
行为),有什么方法可以让它工作吗?我在这里错过了什么?
最佳答案
这里有两种解决方案。
1) 周围有双引号并删除了 ^ 转义字符。
2) 在路径上使用查找。
for /f %%a in ('""%systemRoot%\system32\find.exe" /c /v "" < "c:\something.txt""') do @echo %%a
for /f %%a in (' find.exe /c /v "" ^< "c:\something.txt"') do @echo %%a
这与启动额外的 cmd 进程以在 for 命令中运行命令行有关。
奇怪的是,这三个命令在更简单的上下文中以不同的方式失败。
for /f %%a in (' "c:\windows\system32\find.exe" /c /v "" something.txt ') do @echo %%a
系统找不到指定的路径。
for /f %%a in (' "c:\windows\system32\findstr.exe" /n "." something.txt ') do @echo %%a
目录名称无效。
for /f %%a in (' "c:\windows\notepad" "something.txt" ') do @echo %%a
'c:\windows\notepad""something.txt' 不是内部或外部命令,也不是可运行的程序或批处理文件。
最后一个提供了外部引号被删除的线索。
Windows 8.1 32 位
我认为调用子进程时在 cmd/?
中描述了引用问题:
If /C or /K is specified, then the remainder of the command line after
the switch is processed as a command line, where the following logic is
used to process quote (") characters:
1. If all of the following conditions are met, then quote characters
on the command line are preserved:
- no /S switch
- exactly two quote characters
- no special characters between the two quote characters,
where special is one of: &<>()@^|
- there are one or more whitespace characters between the
two quote characters
- the string between the two quote characters is the name
of an executable file.
2. Otherwise, old behavior is to see if the first character is
a quote character and if so, strip the leading character and
remove the last quote character on the command line, preserving
any text after the last quote character.
关于窗口命令 : problems with for/f with a quoted command with quoted parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22636308/
我是一名优秀的程序员,十分优秀!