gkl*_*kln 36 windows batch comments command-line batch-file
我指的是使用批处理文件将文本添加到文件名末尾(但在扩展名之前)的问题,因为我遇到了同样的问题。使用带有所有更新的 Windows 7 32 位企业版(我知道,我知道......)我写了一个pdfrename.bat
只有三行的小批处理文件:
评论,开始REM
并没有“隐藏”的延续迹象更多的行权
建议的命令,从@Karan 提供的源代码复制粘贴,注释掉REM
批处理采用的命令(加倍%
):
REM Rework 2020-12-16
REM for %a in (*.txt) do ren "%~a" "%~na version 1%~xa"
for %%F in (*.pdf) do ren "%%~F" "%%~nF OdB%%~xF"
Run Code Online (Sandbox Code Playgroud)
从命令提示符运行命令 (3.),
for %F in (*.pdf) do ren "%~F" "%~nF OdB%~xF"
Run Code Online (Sandbox Code Playgroud)
工作正常。
但是pdfrename.bat
从 Windows 资源管理器执行整个批处理文件失败。从命令提示符运行批处理文件pdfrename.bat
会产生错误消息语法错误:
Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters
ist ungültig: %~na version 1%~xa"
[...]
Run Code Online (Sandbox Code Playgroud)
你不需要懂德语。重要的一点是错误信息指的是注释掉的第二行(2.),而不是第三行!
我尝试重新输入REM
,在 REM 之后插入一个制表符,REM
在第一个 ( REM REM ....
)之后插入第二个,在第二个之后插入第三行,内容相同,然后删除第二行 - 没有任何变化:批处理文件终止于注释掉第二行有语法错误。一旦从批次中消除了有罪的第二行,批次就可以正常工作。
我搜索了“REM 被忽略”,但没有运气,所以我在这里发布了这个问题。我以前从未听说或经历过命令处理器至少尝试分析注释掉的行 - 并且在注释符号之后的代码有问题的情况下,它终止了批处理脚本。
Dav*_*ill 50
这是由于用于cmd
处理脚本的非常复杂的解析。
简而言之,解析器%
在几乎所有其他事情(阶段 1)之前处理并抛出错误,因为其中一些%
s 需要像%%
在批处理文件中使用时一样加倍。
所以在批处理文件中:
for %%F in (*.pdf) do ren "%%~F" "%%~nF OdB%%~xF"
Run Code Online (Sandbox Code Playgroud)
是一个有效的命令,并且:
REM for %a in (*.txt) do ren "%~a" "%~na version 1%~xa"
Run Code Online (Sandbox Code Playgroud)
是一个损坏的命令(%a
应该是%%a
,等等)。
注意:
REM for %a in (*.txt) do ren "%~a" "%~na version 1%~xa"
Run Code Online (Sandbox Code Playgroud)
从命令行运行时是有效命令,因为%
不需要加倍。
REM
将在解析器的阶段 2 中处理,但它永远不会到达那里,因为%
阶段 1 中的处理已经产生了错误并终止了解析。
有关cmd
解析器的所有详细信息,请阅读解析 - Windows 命令解释器 (CMD.EXE) 如何解析脚本?- 堆栈溢出
Mok*_*bai 11
它不起作用,因为即使它被“标记”,它也会被评估替换,然后显然被丢弃。
对于“批处理”,您的第二行不正确,应阅读
REM Rework 2020-12-16
REM for %%a in (*.txt) do ren "%%~a" "%%~na version 1%%~xa"
for %%F in (*.pdf) do ren "%%~F" "%%~nF OdB%%~xF"
Run Code Online (Sandbox Code Playgroud)
更正的是,在批处理编程中,扩展需要有 %% 而不是单个 %。
Ral*_*edl 10
要添加到现有答案中,虽然REM
用于评论,但重要的是要了解它实际上是一个什么都不做的命令,而不是评论。这与 Unix shell 不同,在 Unix shell 中您有真正的注释,并且可以在#
字符后添加任意文本。
不仅会评估REM
命令的替代品,还会评估文件重定向。所以要注意下面这行会删除文件的内容,因为REM
命令没有输出,但是空的输出会被重定向到文件中
REM some_command > important_file
Run Code Online (Sandbox Code Playgroud)
编辑
正如评论指出的那样,现代 Windows 版本不再如此。根据/sf/answers/286659341/现在有特殊处理,REM
以便不执行重定向,但这种特殊处理发生得太晚而无法做出REM
真正的评论,因为替代品仍在评估中。
归档时间: |
|
查看次数: |
6850 次 |
最近记录: |