批量文件,用于输入Imgburn构建模式DVD翻录的增量目标文件名

时间:2015-02-13 22:31:57

标签: windows batch-file

  

我试图简化我经常使用的流程。基本上,我的工作流程是从DVD刻录机中取出光盘(带有录制的素材)并将其放入计算机并使用Imgburn的构建模式来创建光盘的ISO。在我录制的同一系列中通常有多张光盘,所以我将其命名为Smith 1.iso,Smith 2.iso等。

     

我对这类内容很陌生,但我已经制作了一些简单的批处理文件来简化文件复制等。

     

我有一个简单的字符串,用于在构建模式下打开Imgburn并输入源路径和目标路径:

start C:\"Program Files (x86)"\ImgBurn\imgburn.exe /mode build /src D:\VIDEO_TS /dest C:\Video\Smith 1.iso
  

我找到了创建增量名称的批处理文件的示例,但我不太了解他们如何工作以了解要根据我的需求进行更改以适应。

     

我希望批处理文件检查Smith 1.iso是否存在,并在/ dest字段中输入增量名称,例如Smith 2.iso,Smith 3.iso等。我需要的系列中最多的光盘可能大约是8个。

     

我理想的结果是我插入光盘,有一个autorun.inf或者打开一个文本框来提示我输入初始文件名。我进入史密斯,它会从那里创建名称。也许它可以将该名称保留为当天的标签,并在第二天再次提示我换一个新名称。

     

非常感谢任何帮助!

     

- 詹姆斯

更新:这就是我现在所处的位置:

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "datestamp=%YYYY%-%MM%-%DD%"
@echo off
setlocal enableDelayedExpansion
rem my testing command pushd "D:\bat\StackOverflow\files"
pushd "C:\Video\video depo %datestamp%"
if "%~1"=="" (
for /F ... %%u ... do set "baseName=%%~u"
  set /p "baseName=Enter Name, (Enter for default %baseName%): "
) else (
  set "baseName=%~1"
)
rem add a trailing space to basename end (optional)
set "baseName=%baseName% "
rem my testing command set "Extn=txt"
set "Extn=iso"
set /A "n=0"
for /f "delims=" %%F in ('
  2^>nul dir /b /a-d "%baseName%*.%Extn%"^
   ^|findstr /xri /c:"%baseName%[0-9]*.*"
') do (
  set "name=%%~nF"
  set "name=!name:*%baseName%=!"
  if !name! gtr !n! set "n=!name!"
)
set /a n+=1
set  "newName=%baseName%%n%.%Extn%"
echo %newName%
rem my testing command type nul>"%newName%"
start C:\"Program Files (x86)"\ImgBurn\imgburn.exe /mode build /src D:\VIDEO_TS /dest C:\Video\video depo %datestamp%\%newName%
PING 1.1.1.1 -n 1 -w 2500 >NUL
start C:\imgburn.ahk
popd
endlocal
echo %baseName%>lastbaseName.txt

2 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "lastvideoname="

:loop
SET "videoname=%lastvideoname%"
SET /p "videoname=Enter Name [%videoname%] "
IF NOT DEFINED videoname GOTO :EOF
IF /i "%videoname%"=="quit" GOTO :EOF
IF /i "%videoname%" neq "%lastvideoname%" set /a volume=0
SET /a volume+=1
SET "lastvideoname=%videoname%"
ECHO now burning %videoname% volume %volume%
ECHO start C:\"Program Files (x86)"\ImgBurn\imgburn.exe /mode build /src D:\VIDEO_TS /dest "C:\Video\%videoname% %volume%.iso"
GOTO loop

相当简单。如果使用 Enter ,请求新名称,默认为相同名称。如果新名称匹配,则增加卷号,如果不重新启动volumne编号。

输入quit以剥土豆。

请注意,start只是echo用于测试目的。删除echo关键字以实际允许imgburn进程继续。


补充资料的修订版

@ECHO OFF
SETLOCAL

SET /p "videoname=Enter Name "
IF NOT DEFINED videoname GOTO :EOF

set /a volume=0
:loop
SET /a volume+=1

IF EXIST "C:\Video\%videoname% %volume%.iso" GOTO loop 
start C:\"Program Files (x86)"\ImgBurn\imgburn.exe /mode build /src D:\VIDEO_TS /dest "C:\Video\%videoname% %volume%.iso"
GOTO :EOF

只需构建目标名称(如果已存在),然后递增卷号,直到找到唯一名称。

请注意,这些程序依赖于输入的完整性;也就是说,所做的条目不包括任何不能用作文件名的:|/\*?等字符。

答案 1 :(得分:0)

这是一个正确的文件重命名脚本(使用rem注释):

@echo off
setlocal enableDelayedExpansion
rem my testing command pushd "D:\bat\StackOverflow\files"
pushd "C:\Video"
if exist lastbaseName.txt (
  rem read last name saved
  for /F "tokens=*" %%G in (lastbaseName.txt) do set "baseName=%%~G"
) else (
  set "baseName=%username%"
)
if "%~1"=="" (
  set /p "baseName=Enter Name, Enter for default !baseName!: "
) else (
  set "baseName=%~1"
)
rem remember last name (or full history with >> redirector instead of > )
echo %baseName%>lastbaseName.txt
rem add a trailing space to basename end (optional)
set "baseName=%baseName% "
rem my testing command set "Extn=txt"
set "Extn=iso"
set /A "n=0"
for /f "delims=" %%F in ('
  2^>nul dir /b /a-d "%baseName%*.%Extn%"^
   ^|findstr /xri /c:"%baseName%[0-9]*.*"
') do (
  set "name=%%~nF"
  set "name=!name:*%baseName%=!"
  if !name! gtr !n! set "n=!name!"
)
set /a n+=1
set  "newName=%baseName%%n%.%Extn%"
echo %newName%
rem my testing command type nul>"%newName%"
echo start C:\"Program Files (x86)"\ImgBurn\imgburn.exe /mode build /src D:\VIDEO_TS /dest "C:\Video\%newName%"
popd
endlocal

输出:

d:\bat>D:\bat\StackOverflow\28509860.bat
Smith 1.txt

d:\bat>D:\bat\StackOverflow\28509860.bat
Smith 2.txt

d:\bat>D:\bat\StackOverflow\28509860.bat
Smith 3.txt

d:\bat>D:\bat\StackOverflow\28509860.bat Jones
Jones 1.txt

d:\bat>D:\bat\StackOverflow\28509860.bat Jones
Jones 2.txt

d:\bat>D:\bat\StackOverflow\28509860.bat
Smith 4.txt

d:\bat>