递归移动文件到文件夹
Recursively move file into folder
我需要有关此脚本的帮助。我需要递归地将一个特定文件移动到一个特定文件夹中。特定文件与特定文件夹位于同一文件夹中。
说清楚。
我试过这个,但它不能递归工作,当我将脚本添加到 Movie1 文件夹并从脚本中删除 cd Movie 文件夹时,它会将文件移动到该文件夹中。但我需要从 Root 开始 运行。感谢任何想法。
cd Movie folder
for /f "delims=" %%i in ('dir /b /s "Subtitles.srt"') do move "%%~i" "Subtitles"
你快到了
您需要第一行来选择性地强制脚本 cd 并在相对的本地驱动器中查找
然后添加相关子目录
cd /D "%~dp0"
for /f "delims=" %%i in ('dir /b /s "Subtitles.srt"') do move "%%~i" "%%~dpiSubtitles"
如果文件夹名称是 \Subtitles folder
那么您需要在末尾添加它,即 "%%~dpiSubtitles folder"
C:\Users>"E:\Movie folder\script.bat"
C:\Users>cd /D "E:\Movie folder\"
E:\Movie folder>for /F "delims=" %i in ('dir /b /s "Subtitles.srt"') do move "%~i" "%~dpiSubtitles"
E:\Movie folder>move "E:\Movie folder\Movie1\subtitles.srt" "E:\Movie folder\Movie1\Subtitles"
1 file(s) moved.
E:\Movie folder>move "E:\Movie folder\Movie2\subtitles.srt" "E:\Movie folder\Movie2\Subtitles"
1 file(s) moved.
E:\Movie folder>move "E:\Movie folder\Movie3\subtitles.srt" "E:\Movie folder\Movie3\Subtitles"
1 file(s) moved.
E:\Movie folder>
你不应该递归搜索根目录,因为目标文件驻留在一定的层次结构深度:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "_ROOT=%~dp0Movie" & rem /* (root directory containing the movie sub-directories;
rem `%~dp0` points to the parent dir. of the script) */
set "_MDIR=Movie*" & rem // (name or mask of movie sub-directories)
set "_SDIR=Subtitles" & rem // (name of subtitles sub-sub-directory)
set "_NAME=Subtitles.srt" & rem // (pure name of the subtitles files)
rem // Iterate through the immediate sub-directories of the given root:
for /D %%J in ("%_ROOT%\%_MDIR%") do (
rem // Check for existence of subtitles file:
if exist "%%~J\%_NAME%" (
rem // Check for non-existence of subtitles file to avoid overwriting:
if not exist "%%~J\%_SDIR%\%_NAME%" (
rem // Actually move subtitles file:
move "%%~J\%_NAME%" "%%~J\%_SDIR%\%_NAME%"
)
)
)
endlocal
exit /B
我需要有关此脚本的帮助。我需要递归地将一个特定文件移动到一个特定文件夹中。特定文件与特定文件夹位于同一文件夹中。
说清楚。
我试过这个,但它不能递归工作,当我将脚本添加到 Movie1 文件夹并从脚本中删除 cd Movie 文件夹时,它会将文件移动到该文件夹中。但我需要从 Root 开始 运行。感谢任何想法。
cd Movie folder
for /f "delims=" %%i in ('dir /b /s "Subtitles.srt"') do move "%%~i" "Subtitles"
你快到了
您需要第一行来选择性地强制脚本 cd 并在相对的本地驱动器中查找
然后添加相关子目录
cd /D "%~dp0"
for /f "delims=" %%i in ('dir /b /s "Subtitles.srt"') do move "%%~i" "%%~dpiSubtitles"
如果文件夹名称是 \Subtitles folder
那么您需要在末尾添加它,即 "%%~dpiSubtitles folder"
C:\Users>"E:\Movie folder\script.bat"
C:\Users>cd /D "E:\Movie folder\"
E:\Movie folder>for /F "delims=" %i in ('dir /b /s "Subtitles.srt"') do move "%~i" "%~dpiSubtitles"
E:\Movie folder>move "E:\Movie folder\Movie1\subtitles.srt" "E:\Movie folder\Movie1\Subtitles"
1 file(s) moved.
E:\Movie folder>move "E:\Movie folder\Movie2\subtitles.srt" "E:\Movie folder\Movie2\Subtitles"
1 file(s) moved.
E:\Movie folder>move "E:\Movie folder\Movie3\subtitles.srt" "E:\Movie folder\Movie3\Subtitles"
1 file(s) moved.
E:\Movie folder>
你不应该递归搜索根目录,因为目标文件驻留在一定的层次结构深度:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "_ROOT=%~dp0Movie" & rem /* (root directory containing the movie sub-directories;
rem `%~dp0` points to the parent dir. of the script) */
set "_MDIR=Movie*" & rem // (name or mask of movie sub-directories)
set "_SDIR=Subtitles" & rem // (name of subtitles sub-sub-directory)
set "_NAME=Subtitles.srt" & rem // (pure name of the subtitles files)
rem // Iterate through the immediate sub-directories of the given root:
for /D %%J in ("%_ROOT%\%_MDIR%") do (
rem // Check for existence of subtitles file:
if exist "%%~J\%_NAME%" (
rem // Check for non-existence of subtitles file to avoid overwriting:
if not exist "%%~J\%_SDIR%\%_NAME%" (
rem // Actually move subtitles file:
move "%%~J\%_NAME%" "%%~J\%_SDIR%\%_NAME%"
)
)
)
endlocal
exit /B