以下批处理文件用于解析目录并将每个文件发送到指定程序,适用于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返回“找不到文件” - 作为普通用户和管理员。发生了什么事?
答案 0 :(得分:3)
您可能希望使用%PROGRAMFILES%而不是将“c:\ program files”硬编码到批处理文件中。对于64位窗口,还有%PROGRAMFILES(x86)%指向32位程序文件目录。
答案 1 :(得分:1)
我在您的代码中看到以下问题:
您似乎使用tokens=1,2 delims=.
将文件名按点拆分为基本名称和扩展名,然后将其作为%%A.%%B
加入。这不适用于包含点的文件名,因为它只从文件名中捕获前两个标记。例如,给定文件名 foo.bar.mts ,%%A.%%B
将扩展为 foo.bar 。
此外,实际上并不需要这种分割/连接。如果您使用没有任何解析选项的循环,则文件名存储在循环变量中,以便您可以简单地使用该变量而不是%%A.%%B
。
如果它们包含空格,则需要将传递给DGAVCIndex.exe的文件名括在引号中。
此外,我第二次Larry's suggestion使用%PROGRAMFILES(x86)%
代替 C:\ Program Files(x86) - 使用预定义的环境变量代替硬编码标准系统路径。
因此,您的代码应如下所示:
@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”。
不要信任资源管理器使用命令行复制您要指定的位置上的文件。