我有這個腳本目前可以部分作業。 第 1 步(作業): 更準確地說,它將我在目錄中找到的所有 .mp4 檔案分組。我選擇每個檔案夾中 .mp4 檔案的數量。到目前為止一切都很好。
第 2 步(不作業): 當我嘗試移動與其中的 mp4 檔案一起創建的檔案夾并將它們按 15 或我需要的數量分組時,我找不到最佳解決方案。
@echo off
setlocal enabledelayedexpansion
PushD %~dp0
set "filesInfolder=60"
set "foldersInfolders=15"
set "fcount=0"
set "fcounta=0"
set idx=0
set idxa=0
REM here all the .mp4 files will be grouped 60 in each folder
for /F "delims=" %%I in ('dir /a-d /o:n /b *.mp4') do (
REM echo Processing %%I
set /a idx=idx %% filesinfolder 1
if !idx! equ 1 set /a fcount =1
md Videos-!fcount! 2>nul
move "%%I" "Videos-!fcount!\"
)
REM here I need the folders created together with the .mp4 files to be grouped by 15 in other folders.
for /D "delims=" %%A in (*.*) do (
REM echo Processing %%A
set /Y idxa=idxa %% foldersinfolders 1
if !idxa! equ 1 set /a fcounta =1
md Canal-!fcounta! 2>nul
move "%%~fA" "Canal-!fcounta!\"
)
一切都在回圈中發生,直到所有 .mp4 檔案完成
uj5u.com熱心網友回復:
可以使用以下批處理檔案將批處理檔案目錄中的視頻檔案組織到動態創建的目錄中,只要MP4檔案的檔案名中不包含感嘆號即可。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
pushd "%~dp0"
set "FilesInFolder=60"
set "FoldersInFolders=15"
set "FileCount=%FilesInFolder%"
set "CanalIndex=0"
set "VideosIndex=%FoldersInFolders%
if not exist "*!*.mp4" goto MoveFiles
echo ERROR: Moving video files not possible because of file names with ! in name.
echo/
echo Please rename first the following files(s):
echo/
dir *!*.mp4 /A-D /B
echo/
pause
goto EndBatch
:MoveFiles
setlocal EnableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir *.mp4 /A-D /B /ON 2^>nul') do (
if !FileCount! == %FilesInFolder% (
set FileCount=0
if !VideosIndex! == %FoldersInFolders% (
set /A CanalIndex =1
set VideosIndex=1
) else set /A VideosIndex =1
set "TargetFolder=Canal-!CanalIndex!\Videos-!VideosIndex!"
md "!TargetFolder!" 2>nul
)
move /Y "%%I" "!TargetFolder!\" >nul
set /A FileCount =1
)
endlocal
:EndBatch
popd
endlocal
TargetFolder
具有兩個動態變化的數字的環境變數CanalIndex
,VideosIndex
可以進一步修改為想要的格式。
閱讀有關使用命令重定向運算子的Microsoft 檔案,了解2>nul
. 當 Windows 命令解釋器在執行命令FOR之前使用在后臺啟動的單獨命令列程執行嵌入式命令列時,重定向運算子>
必須^
在FOR命令列上使用脫字符進行轉義以解釋為文字字符。dir
請注意,/ON
由命令DIR的選項引起的 MP4 檔案按名稱排序是嚴格按字母順序排列的,而不是自然字母數字順序。FOR執行的命令列通過cmd.exe
在后臺再啟動一個選項/c
和作為引數字串附加的命令列可以被修改以獲得 MP4 檔案名輸出,因此接下來以不同的順序處理。
使用檔案名移動 MP4 檔案的FOR命令列示例file (1).mp4
, ... file (9).mp4
, file (10).mp4
, ... file (99).mp4
, file (100).mp4
, ... file (999).mp4
, file (1000).mp4
, ... file (9999).mp4
:
for /F "eol=| delims=" %%I in ('dir *.mp4 /A-D /B /ON 2^>nul ^| %SystemRoot%\System32\findstr.exe /I /R "([0-9])\.mp4$" ^& dir *.mp4 /A-D /B /ON 2^>nul ^| %SystemRoot%\System32\findstr.exe /I /R "([0-9][0-9])\.mp4$" ^& dir *.mp4 /A-D /B /ON 2^>nul ^| %SystemRoot%\System32\findstr.exe /I /R "([0-9][0-9][0-9])\.mp4$" ^& dir *.mp4 /A-D /B /ON 2^>nul ^| %SystemRoot%\System32\findstr.exe /I /R "([0-9][0-9][0-9][0-9])\.mp4$"') do (
請注意,這里[0-9]
也匹配123
應該沒問題的字符。
要了解所使用的命令及其作業原理,請打開命令提示符視窗,在那里執行以下命令,并完整而仔細地閱讀每個命令顯示的幫助頁面。
dir /?
echo /?
endlocal /?
findstr /?
for /?
goto /?
if /?
md /?
move /?
pause /?
popd /?
pushd /?
set /?
setlocal /?
uj5u.com熱心網友回復:
我設法使它作業。我以這種形式附加了代碼的版本,我還將提出一個帶有單個for
回圈的版本。
如果有人想優化這個解決方案,它是免費的,我非常鼓勵它。非常感謝!
更新:我做了一個優化的版本。感謝@Mofi
@echo off
setlocal EnableExtensions EnableDelayedExpansion
pushd "%~dp0"
set "filesInfolder=60"
set "foldersInfolders=15"
set "fcount=0"
set "fcounta=0"
set idx=0
set idxa=0
for /F "delims=" %%I in ('dir /a-d /o:n /b *.mp4') do (
REM echo Processing %%I
set /a idx=idx %% filesinfolder 1
if !idx! == 1 set /a fcount =1
md Videos-!fcount! 2>nul
move "%%I" "Videos-!fcount!\"
)
for /D %%A in (*.*) do (
REM echo Processing %%A
set /a idxa=idxa %% foldersinfolders 1
if !idxa! == 1 set /a fcounta =1
md Canal-!fcounta! 2>nul
move "%%~fA" "Canal-!fcounta!\"
)
endlocal
后期編輯:
現在目錄按名稱的字母順序排列。
Videos-1, Videos-10, Videos-11, ... Video-19
我需要它們以自然的字母數字順序
我找到了一個臨時解決方案,可以連續重命名我的所有內部檔案夾,但最后我將在檔案夾結構中解釋如何對我更好。
我剛剛修改:
md Videos-!fcount! 2>nul
move "%%I" "Videos-!fcount!\"
并成功了
md Videos-!fcount!-123 2>nul
move "%%I" "Videos-!fcount!-123\"
我有MP4-files 檔案夾中的檔案
───MP4-files Folder
│ ├───file.mp4 - (1)
│ ├───file.mp4 - (10)
│ ├───file.mp4 - (11)
│ ├───file.mp4 - (2)
│ ├───file.mp4 - (3)
│ ├───file.mp4 - (4)
│ ├───file.mp4 - (5)
│ ├───file.mp4 - (6)
│ ├───file.mp4 - (7)
│ ├───file.mp4 - (8)
│ └───file.mp4 - (9)
在這里,我運行上面的批處理檔案(稍作修改-123
),所有 .mp4 檔案首先在 Videos-1, Videos-2 ... Videos-xx 中移動,取決于檔案夾中有多少 .mp4 檔案。現在,每個視頻檔案夾中都有 mp4 檔案(取決于我在腳本中寫了多少)set "filesInfolder=60"
,但可能會有所不同。
之后,檔案夾 Videos-1 .. Videos-xx 按順序分組到名稱為“Canal-1 .. Canal-10 .. Canal-x”的其他檔案夾中。檔案夾的數量取決于視頻檔案夾的數量。我在這里組的set "foldersInfolders=15"
人數可以是 15 或其他數字。
我明白了:
─MP4-files Folder
│ ├───Canal-1 -> (set "foldersInfolders=15")
│ │ ├───Videos-1-123 (inside are the .mp4 files) -> set "filesInfolder=60"
│ │ ├───Videos-10-123
│ │ ├───Videos-100-123
│ │ ├───Videos-101-123
│ │ ├───Videos-102-123
│ │ ├───Videos-103-123
│ │ ├───Videos-104-123
│ │ ├───Videos-105-123
│ │ ├───Videos-106-123
│ │ ├───Videos-107-123
│ │ ├───Videos-108-123
│ │ ├───Videos-109-123
│ │ ├───Videos-11-123
│ │ ├───Videos-110-123
│ │ └───Videos-111-123
│ ├───Canal-2
│ │ ├───Videos-12-123
│ │ ├───Videos-13-123
│ │ ├───Videos-14-123
│ │ ├───Videos-15-123
│ │ ├───Videos-16-123
│ │ ├───Videos-17-123
│ │ ├───Videos-18-123
│ │ ├───Videos-19-123
│ │ ├───Videos-2-123
│ │ ├───Videos-20-123
│ │ ├───Videos-21-123
│ │ ├───Videos-22-123
│ │ ├───Videos-23-123
│ │ ├───Videos-24-123
│ │ └───Videos-25-123
│ ├───Canal-3
│ │ ├───Videos-26-123
│ │ ├───Videos-27-123
│ │ ├───Videos-28-123
│ │ ├───Videos-29-123
│ │ ├───Videos-3-123
│ │ ├───Videos-30-123
│ │ ├───Videos-31-123
│ │ ├───Videos-32-123
│ │ ├───Videos-33-123
│ │ ├───Videos-34-123
│ │ ├───Videos-35-123
│ │ ├───Videos-36-123
│ │ ├───Videos-37-123
│ │ ├───Videos-38-123
│ │ └───Videos-39-123
然后我運行以下批處理檔案:
@Echo off
set Cnt=0
for /f "delims=" %%A in (
'dir /B /S /AD Videos-* ^| findstr /iV "^Videos-[0-9][0-9]*$" '
) Do Call :RenInc "%%A"
PopD
Goto :Eof
:RenInc
Set /A Cnt =1
if Exist "Videos-%Cnt%" goto :RenInc
Ren "%~1" "Videos-%Cnt%"
我得到以下檔案夾結構:
──Video-15-sec
│ ├───Canal-1
│ │ ├───Videos-1
│ │ ├───Videos-2
│ │ ├───Videos-3
│ │ ├───Videos-4
│ │ ├───Videos-5
│ │ ├───Videos-6
│ │ ├───Videos-7
│ │ ├───Videos-8
│ │ ├───Videos-9
│ │ ├───Videos-10
│ │ ├───Videos-11
│ │ ├───Videos-12
│ │ ├───Videos-13
│ │ ├───Videos-14
│ │ └───Videos-15
│ ├───Canal-2
│ │ ├───Videos-16
│ │ ├───Videos-17
│ │ ├───Videos-18
│ │ ├───Videos-19
│ │ ├───Videos-20
│ │ ├───Videos-21
│ │ ├───Videos-22
│ │ ├───Videos-23
│ │ ├───Videos-24
│ │ ├───Videos-25
│ │ ├───Videos-26
│ │ ├───Videos-27
│ │ ├───Videos-28
│ │ ├───Videos-29
│ │ └───Videos-30
│ ├───Canal-3
│ │ ├───Videos-31
│ │ ├───Videos-32
│ │ ├───Videos-33
│ │ ├───Videos-34
│ │ ├───Videos-35
│ │ ├───Videos-36
│ │ ├───Videos-37
│ │ ├───Videos-38
│ │ ├───Videos-39
│ │ ├───Videos-40
│ │ ├───Videos-41
│ │ ├───Videos-42
│ │ ├───Videos-43
│ │ ├───Videos-44
│ │ └───Videos-45
│ ├───Canal-4
很好,但如果我在運行 1 次后附加在此答案中的第一個批處理檔案后可以獲得以下檔案夾結構,這對我來說更好。
──Video-15-sec
│ ├───Canal-1
│ │ ├───Videos-1
│ │ ├───Videos-2
│ │ ├───Videos-3
│ │ ├───Videos-4
│ │ ├───Videos-5
│ │ ├───Videos-6
│ │ ├───Videos-7
│ │ ├───Videos-8
│ │ ├───Videos-9
│ │ ├───Videos-10
│ │ ├───Videos-11
│ │ ├───Videos-12
│ │ ├───Videos-13
│ │ ├───Videos-14
│ │ └───Videos-15
│ ├───Canal-2
│ │ ├───Videos-1
│ │ ├───Videos-2
│ │ ├───Videos-3
│ │ ├───Videos-4
│ │ ├───Videos-5
│ │ ├───Videos-6
│ │ ├───Videos-7
│ │ ├───Videos-8
│ │ ├───Videos-9
│ │ ├───Videos-10
│ │ ├───Videos-11
│ │ ├───Videos-12
│ │ ├───Videos-13
│ │ ├───Videos-14
│ │ └───Videos-15
│ ├───Canal-3
│ │ ├───Videos-1
│ │ ├───Videos-2
│ │ ├───Videos-3
│ │ ├───Videos-4
│ │ ├───Videos-5
│ │ ├───Videos-6
│ │ ├───Videos-7
│ │ ├───Videos-8
│ │ ├───Videos-9
│ │ ├───Videos-10
│ │ ├───Videos-11
│ │ ├───Videos-12
│ │ ├───Videos-13
│ │ ├───Videos-14
│ │ └───Videos-15
│ ├───Canal-4
十分感謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/507898.html
下一篇:選擇選項轉到相應的功能