Windows 7 批处理文件在Windows Vista中工作;在Windows 7上导致“找不到文件”

Windows 7 批处理文件在Windows Vista中工作;在Windows 7上导致“找不到文件”,windows-7,batch-file,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 ) 在Windows7x64中,cmd返回普通用户和管理员都找不到的

以下批处理文件用于解析目录并将每个文件发送到指定程序,可在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
)

在Windows7x64中,cmd返回普通用户和管理员都找不到的文件。发生了什么事?

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

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

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

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

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

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

资源管理器模仿一些目录,如C:\program files和C:\Users。当您使用本地化的windows 7时,目录仍然具有相同的名称,但资源管理器会显示一些本地化的内容,如C:\Program或C:\Bemutzer


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

资源管理器模仿一些目录,如C:\Program files和C:\Users。当您使用本地化的windows 7时,目录仍然具有相同的名称,但资源管理器会显示一些本地化的内容,如C:\Program或C:\Bemutzer


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

我发现代码中存在以下问题:

看起来您使用了tokens=1,2 delims=。将文件名按点拆分为基本名称和扩展名,然后将其作为%%A.%%B重新连接。这对包含点的文件名不起作用,因为它仅捕获文件名的前两个标记。例如,给定文件名foo.bar.mts,%%A.%B将扩展为foo.bar

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

您需要将传递给DGAVCIndex.exe的文件名括在引号中,以防它们包含空格

此外,我还建议使用%PROGRAMFILESx86%而不是C:\PROGRAMFILESx86-使用预定义的环境变量而不是硬编码标准系统路径从来都没有坏处

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

@echo off

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

我发现您的代码中存在以下问题:

看起来您使用了tokens=1,2 delims=。将文件名按点拆分为基本名称和扩展名,然后将其作为%%A.%%B重新连接。这对包含点的文件名不起作用,因为它仅捕获文件名的前两个标记。例如,给定文件名foo.bar.mts,%%A.%B将扩展为foo.bar

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

您需要将传递给DGAVCIndex.exe的文件名括在引号中,以防它们包含空格

此外,我还建议使用%PROGRAMFILESx86%而不是C:\PROGRAMFILESx86-使用预定义的环境变量而不是硬编码标准系统路径从来都没有坏处

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

@echo off

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

谢谢你的建议,但这与问题无关。我希望这可能是一个微妙的拼写错误。谢谢你的建议,但这与问题无关。糟糕。我希望这可能是一个微妙的拼写错误。我不太清楚你在问什么。。。我只有64位版本的Win7。该文件存在于批处理文件中的位置。我不太确定您在问什么。。。我只有64位版本的Win7。该文件存在于批处理文件中的位置。是的,它存在。我直接从资源管理器复制并粘贴了它。是的。我直接从资源管理器复制并粘贴了它。我的Windows 7本地化为美国英语;资源管理器路径和命令行路径完全相同。这不是问题。我的Windows 7是本地化为美国英语的;资源管理器路径和命令行路径完全相同。这不是问题所在。