Byt*_*are 10 windows cmd batch-file
多年来我一直把所有的电影都放到一个文件夹里,还有他们所有的额外内容.我已经意识到,经过几次挫折后,保持nfo和艺术的备份可以节省我的生命,并在添加新的Kodi设置(电视,平板电脑,笔记本电脑等等)时保持数据库更加可用.所以我试图根据电影的文件名批量创建一个文件夹,并将多个相关文件移动到创建的文件夹中.
为了清楚起见,我想制作电影的文件夹名称,并让所有相关文件进入该文件夹.电影文件名的格式可以改变,因为它们并不都具有相同的信息,即Director's cut,unedit,终极版,它们都在bralas []中.在所有情况下,主电影名称都是最小的文件名,我永远不希望文件夹以文件名中包含"[Extra]"的文件命名.一般来说,格式是"电影(年份)[额外信息] ... [额外信息]这里的小描述"非电影视频.
我提出的最好的是:
for %%i in (*) do md "%%~ni" && move "%%~i" "%%~ni"
Run Code Online (Sandbox Code Playgroud)
现在的问题是我正在为每个文件创建一个文件夹,并将所有文件移动到相应的文件夹,但相关内容现在位于不同的文件夹中,具有完全相同文件名的内容将保留在主文件夹中.
我想要完成的一个例子:
至:
任何人都可以帮我处理这批代码吗?并非所有文件名都是电影(年份)[Comm] ...,有些只是电影或电影[Comm].
总结:我想创建一个基于电影的文件夹,即任何具有特定视频扩展名的文件,如mp4,mkv,avi等......也不包含:[Extra]; 然后将所有相关文件移动到该文件夹中.
我经历过这些来源:
虽然您的描述充足,但您忘了提供一些具体细节; 例如:使用"电影(年)"部分启动所有文件名?如果是这样,那么这个批处理文件可以做你想要的:
编辑:Ops,我误解了要求!此版本正常工作:
@echo off
setlocal
set "basename=."
for /F "tokens=1* delims=." %%a in ('dir /B /A-D ^| sort /R') do (
set "filename=%%a"
setlocal EnableDelayedExpansion
for /F "delims=" %%c in ("!basename!") do if "!filename:%%c=!" equ "!filename!" (
set "basename=!filename!"
md "!basename!"
)
move "!filename!.%%b" "!basename!"
for /F "delims=" %%c in ("!basename!") do (
endlocal
set "basename=%%c
)
)
Run Code Online (Sandbox Code Playgroud)
小智 5
只需将以下带有 .Bat 扩展名的代码保存在实际源位置即可。
@echo off
for %%a in (*.*) do (
md "%%~na" 2>nul
move "%%a" "%%~na"
)
pauseRun Code Online (Sandbox Code Playgroud)
做到这一点并不容易,因为您必须对文件名进行排序。您可以使用 指定排序顺序dir,但它不会首先使用最短的名称。例如foo.wmv,按字母顺序位于 后面foo subtitles.srt,因为空格位于点之前。
因此,作为一种解决方法,也许您可以拥有一个包含基本电影名称的“已知扩展名”列表,然后移动与它们共享基本名称的所有文件。下面的脚本就是这样做的。它列出了所有带有avi、mp4和mkv扩展名的文件,但也许您必须以 开头nfo,这可能适用于许多电影。该脚本使用这些文件的文件名来创建目录并查找相关文件。它似乎可以解决问题,但请在使用前做好备份。:)
此脚本中的假设是具有已知扩展名的文件也具有最短的名称。如果还有其他文件的名称较短(或不匹配),则它们不会被移动到该文件夹。
剧本并不完美。最大的缺点是,如果一部电影包含多个 mp4 文件,它将为每个文件创建一个文件夹。但是,如果您进行几次迭代,每次以特定顺序使用不同的扩展(从nfo其他类似的扩展开始,然后继续电影二进制扩展等),您可能能够自动完成至少大部分工作。
@echo off
setlocal
REM store current directory. Using separate variable makes it
REM easier to change behaviour too.
set dir=%cd%
REM call subroutine for each supported extension.
call :do .info
call :do .mp4
call :do .avi
call :do .mkv
REM Main program done.
echo Press a key to close.
pause
exit /b
:do
set ext=%1
REM loop through all files with the given extension.
for /f "tokens=*" %%f in ('dir /b /on "%dir%\*%ext%"') do (
REM trim the extension and use the base name as directory name.
setlocal EnableDelayedExpansion
set thefile=%%~nf
echo !thefile!
md "%dir%\!thefile!"
REM move all files that start with the same base name.
move "%dir%\!thefile!*.*" "%dir%\!thefile!\"
)
REM exit subroutine
exit /b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32582 次 |
| 最近记录: |