Batch file 拖放bat文件以自动化exiftool

Batch file 拖放bat文件以自动化exiftool,batch-file,cmd,exiftool,Batch File,Cmd,Exiftool,我试图用一个非常简单的批处理文件自动编辑PDF标题。我希望能够拖放一系列文件,并让cmd为每个文件运行exiftool。运行命令后,我想显示一条消息,询问编辑是否成功,在第一种情况下,我将删除从exiftools创建的原始备份文件,在第二种情况下,我将恢复它们。这是我写的: :renaming if "%~1" == "" goto:done "C:\Users\Alessio\Desktop\Programmazione\Exiftools\e

我试图用一个非常简单的批处理文件自动编辑PDF标题。我希望能够拖放一系列文件,并让cmd为每个文件运行exiftool。运行命令后,我想显示一条消息,询问编辑是否成功,在第一种情况下,我将删除从exiftools创建的原始备份文件,在第二种情况下,我将恢复它们。这是我写的:

:renaming
if "%~1" == "" goto:done
"C:\Users\Alessio\Desktop\Programmazione\Exiftools\exiftool.exe" "-title<${filename;s/.[^.]*$//}" "%~1"
shift
goto:renaming

:deleteOriginals
if "%~1" == "" goto:end
"C:\Users\Alessio\Desktop\Programmazione\Exiftools\exiftool.exe" -restore_original "%~1"
shift
goto:deleteOriginals

:restoreOriginals
if "%~1" == "" goto:end
"C:\Users\Alessio\Desktop\Programmazione\Exiftools\exiftool.exe" -delete_original "%~1"
shift
goto:restoreOriginals

:done
shift /1
choice /C YN /M "I file sono stati rinominati correttamente?" && goto:deleteOriginals || goto:restoreOriginals

:end
pause
:重命名
如果“%~1”==”转到:完成

“C:\Users\alesio\Desktop\Programmazione\Exiftools\exiftool.exe”“-title我已设法通过删除循环使其正常工作。仍然接受关于沿着该路径前进的建议,但这似乎有效:

"C:\Users\Alessio\Desktop\Programmazione\Exiftools\exiftool.exe" "-title<${filename;s/.[^.]*$//}" %*

choice /C YN /M "I file sono stati rinominati correttamente?"
if "%errorlevel%" == "1" goto:deleteOriginals
if "%errorlevel%" == "2" goto:restoreOriginals

:deleteOriginals
"C:\Users\Alessio\Desktop\Programmazione\Exiftools\exiftool.exe" -k -delete_original %*
exit

:restoreOriginals
"C:\Users\Alessio\Desktop\Programmazione\Exiftools\exiftool.exe" -k -restore_original %*
exit

我已经设法通过移除循环来实现这一点。仍然可以接受关于沿着这条道路走下去的建议,但这似乎是可行的:

"C:\Users\Alessio\Desktop\Programmazione\Exiftools\exiftool.exe" "-title<${filename;s/.[^.]*$//}" %*

choice /C YN /M "I file sono stati rinominati correttamente?"
if "%errorlevel%" == "1" goto:deleteOriginals
if "%errorlevel%" == "2" goto:restoreOriginals

:deleteOriginals
"C:\Users\Alessio\Desktop\Programmazione\Exiftools\exiftool.exe" -k -delete_original %*
exit

:restoreOriginals
"C:\Users\Alessio\Desktop\Programmazione\Exiftools\exiftool.exe" -k -restore_original %*
exit


当我正确理解它时,您希望(请参见
&&
| |
)我已经遵循了建议(编辑我的问题),但它仍然给出了相同的问题。在choice语句之后,当它转到:deleteOriginals或:restoreOriginals部分时,cmd显示
if”“==”“goto:end
并且程序在不执行所需命令的情况下结束请记住:
goto
不会“撤消”
shift
。您应该在第一个循环中执行条件:
exiftool…&&删除原版| |恢复原版
并跳过其余的代码。啊,我明白你的意思了。。。但我需要使删除原始文件和恢复原始文件取决于用户输入(选择命令)。它并不取决于exiftool是否成功运行(我甚至不确定它是否输出真/假值)。我希望能够在一个批处理文件中实现这一点,而不必为deleteOriginal和restoreOriginal再创建两个。我想到的另一点是:exiftool能够处理多个参数。是否有一种方法可以使拖放操作将每个文件显示为同一行上的参数?e、 g.
exiftool“C:\…\fileA.pdf”“C:\…\fileB.pdf”“C:\…fileC.pdf”
我觉得这会让一切变得简单。当我正确理解它时,你会想(请参见
&&
|
)我已经遵循了建议(编辑我的问题),但它仍然给出了同样的问题。在choice语句之后,当它转到:deleteOriginals或:restoreOriginals部分时,cmd将显示
if”“==”goto:end
,并且程序在不执行所需命令的情况下结束。请记住:
goto
不会“撤消”
shift
。您应该在第一个循环中执行条件:
exiftool…&&删除原版| |恢复原版
并跳过其余的代码。啊,我明白你的意思了。。。但我需要使删除原始文件和恢复原始文件取决于用户输入(选择命令)。它并不取决于exiftool是否成功运行(我甚至不确定它是否输出真/假值)。我希望能够在一个批处理文件中实现这一点,而不必为deleteOriginal和restoreOriginal再创建两个。我想到的另一点是:exiftool能够处理多个参数。是否有一种方法可以使拖放操作将每个文件显示为同一行上的参数?e、 g.
exiftool“C:\…\fileA.pdf”“C:\…\fileB.pdf”“C:\…fileC.pdf”
我觉得这会让一切变得更简单
&
识别零的退出代码,但是
选项
会根据用户输入将其设置为1、2等,所以总是
;这就是为什么您需要
if
条件的原因……此外,考虑到对批处理文件进行拖放的参数处理的实现非常糟糕,因为文件路径只有在包含空格时才被引用,但包含任何其他特殊字符(如
&
^
,或
=
)不受引号的保护…有什么办法可以解决这个问题吗?或者批处理只是作业的错误工具?确实存在一些解决方法-请参阅并…
&&
识别零的退出代码,但
选择将其设置为1、2等,具体取决于用户输入,因此始终是
|
;这就是为什么您需要
if
条件的原因……此外,考虑到对批处理文件进行拖放的参数处理的实现非常糟糕,因为文件路径只有在包含空格时才被引用,但包含任何其他特殊字符(如
&
^
,或
=
)不受引号的保护…有什么办法可以解决这个问题吗?或者批处理只是工作的错误工具?确实存在解决方法-请参阅和…