批处理文件在Windows Vista中工作;在Windows 7上找到“找不到文件”的结果

时间:2010-07-11 06:51:25

标签: windows-7 batch-file

以下批处理文件用于解析目录并将每个文件发送到指定程序,适用于Windows Vista x64:

@ECHO OFF

FOR /F "tokens=1,2 delims=." %%A IN ('dir /b /on *.mts') DO (
    "C:\Program Files (x86)\DGAVCDecode\DGAVCIndex.exe" -i %%A.%%B -o %%~nA.dga -f 2 -a -e
)

在Windows 7 x64中,cmd返回“找不到文件” - 作为普通用户和管理员。发生了什么事?

5 个答案:

答案 0 :(得分:3)

您可能希望使用%PROGRAMFILES%而不是将“c:\ program files”硬编码到批处理文件中。对于64位窗口,还有%PROGRAMFILES(x86)%指向32位程序文件目录。

答案 1 :(得分:1)

我在您的代码中看到以下问题:

  1. 您似乎使用tokens=1,2 delims=.将文件名按点拆分为基本名称和扩展名,然后将其作为%%A.%%B加入。这不适用于包含点的文件名,因为它只从文件名中捕获前两个标记。例如,给定文件名 foo.bar.mts %%A.%%B将扩展为 foo.bar

    此外,实际上并不需要这种分割/连接。如果您使用没有任何解析选项的循环,则文件名存储在循环变量中,以便您可以简单地使用该变量而不是%%A.%%B

  2. 如果它们包含空格,则需要将传递给DGAVCIndex.exe的文件名括在引号中。

  3. 此外,我第二次Larry's suggestion使用%PROGRAMFILES(x86)%代替 C:\ Program Files(x86) - 使用预定义的环境变量代替硬编码标准系统路径。

  4. 因此,您的代码应如下所示:

    @echo off
    
    for %%f in (*.mts) do (
      "%ProgramFiles(X86)%\DGAVCDecode\DGAVCIndex.exe" -i "%%~f" -o "%%~nf.dga" -f 2 -a -e
    )
    

答案 2 :(得分:0)

这看起来很明显,但在指定位置的Win7机器上是否存在DGAVCIndex.exe

答案 3 :(得分:0)

您确定文件夹名称相对于Windows 7的32位和64位版本是否正确。您是否检查批处理文件是否存在于bat文件中提到的位置。

答案 4 :(得分:0)

Explorer模仿某些目录,如“C:\ Program Files”和“C:\ Users”。当您使用本地化的Windows 7时,这些目录仍具有相同的名称,但Explorer会显示本地化的内容,如“C:\ Program”或​​“C:\ Bemutzer”。

不要信任资源管理器使用命令行复制您要指定的位置上的文件。