windows 命令提示符FOR /F %%f IN('DIR/B')对于第一个结果失败

ldxq2e6h  于 2022-11-26  发布在  Windows
关注(0)|答案(2)|浏览(168)

我正在使用一个批处理文件将文件夹中的所有文件重命名为一个编号列表。我使用的代码如下:

set /a Index=1

setlocal enabledelayedexpansion

for /f "tokens=*" %%f in ('dir /b') do (
echo %%f
echo !Index!
rename "%%f" "!Index!.*"
set /a Index+=1
pause
)

批处理文件的结果为

G:\Directory A> (
echo
03.jpg
echo 1
rename "
03.jpg" "1.*"
set /a Index+=1
pause
)

03.jpg
1
The filename, directory name, or volume label syntax is incorrect.
Press any key to continue . . .

G:\Directory A> (
echo 04.jpg
echo 1
rename "04.jpg" "1.*"
set /a Index+=1
pause
)
04.jpg
1

第一个结果总是在文件名的开头包含一个换行符,这会导致RENAME命令失败。有人能告诉我我的代码有什么问题吗?
更新
在Windows注册表中设置了以下自动运行代码:

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="@chcp 65001>nul & prompt $d$s$s$t$_$p$g & cls"
rxztt3cl

rxztt3cl1#

在我的批处理文件挖掘了一点,我认识到这是一个问题的自动运行选项,我已经设置了多年前在注册表,看起来像这样:

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="@chcp 65001>nul & prompt $d$s$s$t$_$p$g & cls"

显然,CLS命令导致了奇怪的换行符的发生。在从Autorun中删除CLS部分后,批处理文件按预期的方式工作。

p8ekf7hl

p8ekf7hl2#

self-answer中描述的发现非常有趣,尽管非常讨厌!
自动运行代码包含cls command,它向控制台发送一个换页字符(FF,代码0x0C),告诉它清除屏幕(可以通过在控制台中运行cls > con来显示该字符)。
当在for /F loop中执行cls时,捕获FF:for /F %F in ('cls') do @echo/%F将显示该字符。
for /F循环启动新的cmd.exe示例以执行给定的命令行;这是通过将cmd /C置于命令行之前来完成的。
设置了自动运行命令后,它们将在for /F循环中执行(由于不幸缺少/D选项,这将阻止它们运行)。
问题中的auto-run命令行涉及到cls,因此for /F %F in ('rem') do @echo/%F捕获了一个FF,尽管实际的命令rem没有返回任何内容。
有一些方法可以隐藏FF字符(请注意,下列程式码范例是要放在batch-file中,而不是输入主控台):
1.在所需的命令行之前添加echo/&,以便将换行符附加到可能的FF,从而在开头增加一行,并跳过该行for /F

rem // Precede the desired command with `echo/` and skip the first line:
for /F "skip=1 delims=" %%I in ('echo/^& dir /B') do echo "%%I"

1.首先检索一个FF,并将其定义为for /Feol(行尾)字符,然后再次像前面一样,在所需的命令行前面加上echo/&

rem // Retrieve the form-feed character and ignore lines beginning with a form-feed:
for /F delims^=^ eol^= %%F in ('echo/^& cls') do set "_FF=%%F"

rem // Precede the desired command with `echo/` and use form-feed as `eol` character:
for /F "delims= eol=%_FF%" %%I in ('echo/^& dir /B') do echo "%%I"

相关问题