迭代目录中的文件会为文件名添加额外的字符

时间:2014-04-25 17:12:21

标签: batch-file

由于某些奇怪的原因,这个批处理脚本在迭代目录中的非隐藏文件时,会在文件名前添加一个额外的字符。

见这个例子:

Prepended character example

纯文本:

FOR /F %i in ('dir "*.sql" /A-H /b') DO @echo %i

输出:

♀test.sql

这是一个问题,因为当我尝试打开%i时,它表示它不存在。

我可以替换第一个字符,但是这个脚本需要在多台机器上工作,而不仅仅是我的。这只发生在我的机器上。知道怎么解决吗?

更新

Hex Editor

所以0x0C(换页?)似乎是插入的字符。

1 个答案:

答案 0 :(得分:2)

首先,看看Stack Overflow问题Windows batch outputs a line feed female character上的答案。

其次,请查看Microsoft的TechNet文章Command Processor\AutoRun,或在输入cmd /?关于 AutoRun 注册表值后阅读帮助输出。

在重定向命令dir的输出上首先写入表单馈送的计算机上,有一个批处理文件或另一个命令配置为在命令行处理器启动时自动执行。其中一个命令负责换页字符。

通过使用选项cmd.exe启动/D然后输入可在相关屏幕截图中看到的命令,无需先查看Windows注册表即可快速检查。如果文件file.txt现在没有作为第一个字符的换页符,则可能确实有一个自动运行命令负责此不良行为。

立即开始regedit.exe并检查

下的值自动运行
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor

HKEY_CURRENT_USER\Software\Microsoft\Command Processor

在我的电脑上,HKCU中根本不存在 AutoRun 值,而HKLM中该值为空。

也可以在此计算机上的命令提示符窗口set中运行,并查看环境变量

  • ComSpec ...应为C:\Windows\System32\cmd.exe
  • PATHEXT ...应为.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
  • 路径 ...应以C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;
  • 开头

此计算机上的命令处理器可能不是cmd.exe PATH ,而是与Windows目录中的System32目录不同的文件夹,此文件夹还包含{{1}或其他可在Windows的System32目录中找到的控制台应用程序。

根据Environment Variables文档,可以在控制面板 - 系统 - 高级 - 环境变量中配置这3个非常重要的环境变量。