从批处理文件运行程序时,有没有办法维护原始文件关联?
我创建了一个调用Windows程序并执行一些文件维护的批处理文件。我将文件关联更改为批处理文件。当我单击与该程序关联的文件时,批处理文件将执行并打开程序,但我点击的文件未加载。原始文件关联丢失。
这种方法很有意义,因为批处理文件中的CALL命令一旦从启动批处理文件的初始鼠标单击中删除。
我是否可以添加一种语法,将目标文件名作为变量传递给批处理文件并将其附加到CALL命令行?
BTW,这适用于XP机器。任何帮助将不胜感激!编辑:这是我试图写的代码:
call "C:\Program Files\CorelDRAW X4\Programs\CorelDRW.exe"
:loop
if exist "C:\Documents and Settings\<user>\My Documents\corel user files\*.cdr" copy "C:\Documents and Settings\<user>\My Documents\corel user files\*.cdr" "C:\Documents and Settings\<user>\My Documents\corel user files\*.sav"
ping localhost -n 300 > nul
goto loop
我试图保护CorelDraw的自动保存文件。有一个错误,CorelDraw有时会在异常关闭期间删除自动保存文件。我更改了.cdr文件关联,以便单击cdr文件调用批处理文件,批处理文件又调用Coreldraw并将自动保存文件复制到不同的文件名。该部分有效,但我必须手动打开我点击的文件。
理想情况下,当我关闭CorelDraw时,我想找到一种终止循环的方法,但是一旦我解决了文件关联问题,我就会越过那个桥。
EDIT2:这是echo %CMDCMDLINE%
:
C:\WINDOWS\system32\cmd.exe /c ""C:\Documents and Settings\<user>\My Documents\corel user files\protect_autosave.bat" "C:\Documents and Settings\<user>\My Documents\filename.cdr""
答案 0 :(得分:0)
据我了解任务要求,批处理文件%ProgramFiles%\CorelDRAW X4\Programs\CorelFile.bat
中使用的代码是:
@echo off
if "%~1" == "" goto :EOF
"%ProgramFiles%\CorelDRAW X4\Programs\CorelDRW.exe" %*
for %%I in (%*) do if exist %%I copy /Y "%%~I" "%%~dpnI.sav" >nul
此批处理文件必须与文件扩展名.cdr
关联,例如在Windows XP及更高版本的Windows版本上导入以下注册表文件,并具有管理员权限:
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.cdr]
@="CorelDrawFile"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CorelDrawFile]
@="Corel Draw Image"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CorelDrawFile\DefaultIcon]
@=hex(2):22,25,50,72,6f,67,72,61,6d,46,69,6c,65,73,25,5c,43,6f,72,65,6c,44,52,\
41,57,20,58,34,5c,50,72,6f,67,72,61,6d,73,5c,43,6f,72,65,6c,44,52,57,2e,65,\
78,65,22,2c,30,00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CorelDrawFile\shell\open\command]
@=hex(2):22,25,50,72,6f,67,72,61,6d,46,69,6c,65,73,25,5c,43,6f,72,65,6c,44,52,\
41,57,20,58,34,5c,50,72,6f,67,72,61,6d,73,5c,43,6f,72,65,6c,46,69,6c,65,2e,\
62,61,74,22,20,22,25,31,22,00
也可以使用.cdr
的绝对路径注册文件扩展名REG_SZ
,而不是在路径中使用REG_EXPAND_SZ
和%ProgramFiles%
。
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.cdr]
@="CorelDrawFile"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CorelDrawFile]
@="Corel Draw Image"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CorelDrawFile\DefaultIcon]
@="\"C:\\Program Files\\CorelDRAW X4\\Programs\\CorelDRW.exe\",0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CorelDrawFile\shell\open\command]
@="\"C:\\Program Files\\CorelDRAW X4\\Programs\\CorelFile.bat\" \"%1\""
Windows资源管理器在双击单个* .cdr文件时,分别使用上下文菜单打开为每个选定的* .cdr文件调用批处理文件。
批处理文件启动 Corel Draw ,其中传递给批处理文件的所有参数都传递给 Corel Draw 。这通常只是* .cdr文件的文件名,其中完整路径和文件扩展名用双引号括起来。
Corel Draw 终止后,批处理文件会检查指定为命令行参数的每个文件是否存在,并将具有相同名称的文件复制到具有不同文件扩展名.sav
的同一目录中。 / p>
批处理文件设计用于在命令行中指定为参数的多个* .cdr文件名启动。我不知道 Corel Draw 是否支持在命令行中指定多个* .cdr文件。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
call /?
...解释%*
(批处理文件)和%1
(Windows注册表)。copy /?
echo /?
for /?
if /?