批处理文件适用于 Windows Vista;结果“未找到文件”在 Windows 7 上
以下批处理文件旨在解析目录并将每个文件发送到指定的程序,适用于 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 返回“未找到文件”— 无论是作为普通用户还是管理员。这是怎么回事?
The following batch file, meant to parse a directory and send each file to the specified program, works in 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
)
In Windows 7 x64, cmd returns "File Not Found"—both as a normal user and Administrator. What's going on?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可能想使用 %PROGRAMFILES% 而不是将“c:\program files”硬编码到批处理文件中。对于 64 位 Windows,还有 %PROGRAMFILES(x86)% 指向 32 位程序文件目录。
You might want to use %PROGRAMFILES% instead of hard coding "c:\program files" into your batch file. For 64bit windows, there's also %PROGRAMFILES(x86)% which points to the 32bit program files directory.
我在您的代码中看到以下问题:
看起来您使用
tokens=1,2 delims=.
将文件名按点拆分为基本名称和扩展名,然后将它们连接回来%%A.%%B
。这不适用于包含点的文件名,因为它仅捕获文件名中的前两个标记。例如,给定文件名 foo.bar.mts,%%A.%%B
将扩展为 foo.bar。此外,实际上并不需要这种拆分/连接。如果您使用不带任何解析选项的循环,则文件名将存储在循环变量中,以便您可以简单地使用该变量而不是
%%A.%%B
。您需要将传递给 DGAVCIndex.exe 的文件名括在引号中,以防它们包含空格。
您需要将
另外,我第二个Larry 建议 使用
%PROGRAMFILES(x86)%
而不是 C:\Program Files (x86) - 这永远不会有坏处使用预定义的环境变量而不是硬编码标准系统路径。所以,你的代码应该是这样的:
I see the following problems in your code:
Looks like you use
tokens=1,2 delims=.
to split the file name by dot into the base name and extension and then join them back as%%A.%%B
. This won't work with file names that contain dots, because it captures only the first two tokens from the file name. For example, given the file name foo.bar.mts,%%A.%%B
will expand to foo.bar.Moreover, this split/join isn't actually needed. If you use the loop without any parsing options, the file name is stored in the loop variable so that you can simply use that variable instead of
%%A.%%B
.You need to enclose the file names passed to DGAVCIndex.exe in quotes, in case they contain spaces.
Also, I second Larry's suggestion to use
%PROGRAMFILES(x86)%
instead of C:\Program Files (x86) — it never hurts to use predefined environment variables instead of hard-coding standard system paths.So, your code should look like this:
这似乎是显而易见的,但是
DGAVCIndex.exe
是否存在于 Win7 计算机上的指定位置?This might seem obvious, but does
DGAVCIndex.exe
exist on the Win7 machine at the specified location?您确定 Windows 7 的 32 位和 64 位版本的文件夹名称正确吗?您是否检查了批处理文件是否存在于您在 bat 文件中提到的位置。
Are you sure the folder names are correct with respect to the 32 bit and 64 bit versions of Windows 7. Did you check whether your batch file exists in the location that you have mentioned in the bat file.
资源管理器模仿一些目录,如“C:\Program Files”和“C:\Users”。当您使用本地化的 Windows 7 时,目录仍具有相同的名称,但资源管理器会显示本地化的内容,例如“C:\Programme”或“C:\Bemutzer”。
不要相信资源管理器使用命令行将文件复制到您要指定的位置。
Explorer mimics some directories like "C:\Program Files" and "C:\Users". When you use a localized windows 7, the directories have still the same name, but Explorer displays something localized like "C:\Programme" or "C:\Bemutzer".
Dont trust Explorer use the command line for copying files on a location you want to specify.