批量将文件从 list.txt 移动到子目录

批量将文件从 list.txt 移动到子目录

大家好。我在这个网站上研究过这个问题,但找不到我想要的答案。抱歉,我发了与其他帖子类似的内容。

我有一个文本文档“ListedFiles.txt”。它包含所有文件所属的所有目录。我试图做的是获取文本文档并将父目录中的所有文件移动到文本中列出的子目录中。

每次处理此代码时,我都会收到“重复错误”提示。有人认为他们可以解决我的问题吗?我认为这应该是一个相对简单的修复方法。

@echo off
set dir=C:\Users\user\texture\
set mask=ListedFiles.txt

cd "%dir%"
for /r %%# in (%mask%) do echo move "%%~#"&echo mklink /h "%%~#" "%%~nx#"
pause

无链接

set dir=C:\Users\user\texture\
set mask=*.bmp

cd "%dir%"
for /r %%# in (%mask%) do move "%%~#"
pause

答案1

如果文本文件的内容是一些......

like this         ..or  like this
.\000_000\000.bmp       C:\Users\rivers\Desktop\data hd\texture\000_000\000.bmp
.\001_001\001.bmp       C:\Users\rivers\Desktop\data hd\texture\001_001\001.bmp
.\002_002\002.bmp       C:\Users\rivers\Desktop\data hd\texture\002_002\002.bmp
.\003_003\003.bmp       C:\Users\rivers\Desktop\data hd\texture\003_003\003.bmp
.\004_004\004.bmp       C:\Users\rivers\Desktop\data hd\texture\004_004\004.bmp
.\005_005\005.bmp       C:\Users\rivers\Desktop\data hd\texture\005_005\005.bmp
.\006_006\006.bmp       C:\Users\rivers\Desktop\data hd\texture\006_006\006.bmp

尝试这个:

  • 命令行:
cd /d "C:\Users\rivers\Desktop\data hd\texture" && for /f useback^delims^= %i in (`type list_dir_files.txt`)do @move /y .\"%~nxi" "%~i" 2>nul || @echo; Check: .\"%~nxi" "%~i" 

  • 沐浴档案:
@echo off

cd /d "C:\Users\rivers\Desktop\data hd\texture" 2>nul || exit /b 
           
for /f useback^tokens^=*^delims^= %%i in =;(` type .\"list_dir_files.txt"
    `);= do 2>nul move /y .\"%%~nxi" "%%~i" || echo; Check: .\"%%~nxi" "%%~i"  


如果文本文件的内容是一些......

 like this          ..or  like this         ..or  like this
 .\000_000\000.bmp        \000_000\000.bmp        000_000\000.bmp
 .\001_001\001.bmp        \001_001\001.bmp        001_001\001.bmp
 .\002_002\002.bmp        \002_002\002.bmp        002_002\002.bmp
 .\003_003\003.bmp        \003_003\003.bmp        003_003\003.bmp
 .\004_004\004.bmp        \004_004\004.bmp        004_004\004.bmp
 .\005_005\005.bmp        \005_005\005.bmp        005_005\005.bmp
 .\006_006\006.bmp        \006_006\006.bmp        006_006\006.bmp

尝试这个:

  • 命令行:
cd /d "C:\Users\rivers\Desktop\data hd\texture" && for /f useback^delims^= %i in (`type list_dir_files.txt`)do @move /y .\"%~nxi" "%cd%\%~i" 2>nul || @echo; Check: .\"%~nxi" "%cd%\%~i" 

  • 沐浴档案:
@echo off

cd /d "C:\Users\rivers\Desktop\data hd\texture" 2>nul || exit /b 
           
for /f useback^tokens^=*^delims^= %%i in =;(` type .\"list_dir_files.txt"
    `);= do 2>nul move /y .\"%%~nxi" "%%~i" || echo; Check: .\"%%~nxi" "%%~i"


如果文本文件的内容是一些......

like this          ..or  like this
./000_000/000.bmp        C:/Users/rivers/Desktop/data hd/texture/000_000/000.bmp
./001_001/001.bmp        C:/Users/rivers/Desktop/data hd/texture/001_001/001.bmp
./002_002/002.bmp        C:/Users/rivers/Desktop/data hd/texture/002_002/002.bmp
./003_003/003.bmp        C:/Users/rivers/Desktop/data hd/texture/003_003/003.bmp
./004_004/004.bmp        C:/Users/rivers/Desktop/data hd/texture/004_004/004.bmp
./005_005/005.bmp        C:/Users/rivers/Desktop/data hd/texture/005_005/005.bmp
./006_006/006.bmp        C:/Users/rivers/Desktop/data hd/texture/006_006/006.bmp

尝试这个:

  • 命令行:
cd /d "C:\Users\rivers\Desktop\data hd\texture" && for /f usebackq^delims^= %i in (`type list_dir_files.txt`)do @set "_str=" & =;@(set "_str=%~i" & call move /y .\"%~nxi" "%_str:/=\%" || call echo; Check: .\"%~nxi" "%_str:/=\%" );= 2>nul
  • 沐浴档案:
@echo off

cd /d "C:\Users\rivers\Desktop\data hd\texture" 2>nul || exit /b 

for /f useback^tokens^=*^delims^= %%i in =;(` type .\"list_dir_files.txt" `);= do set "_str=" & 2>nul =;(
    set "_str=%%~i" & call move /y .\"%%~nxi" "%%_str:/=\%%" || call echo; Check: .\"%%~nxi" "%%_str:/=\%%" 
   );=

如果文本文件的内容是一些......

 like this          ..or  like this         ..or  like this
 ./000_000/000.bmp        /000_000/000.bmp        000_000/000.bmp
 ./001_001/001.bmp        /001_001/001.bmp        001_001/001.bmp
 ./002_002/002.bmp        /002_002/002.bmp        002_002/002.bmp
 ./003_003/003.bmp        /003_003/003.bmp        003_003/003.bmp
 ./004_004/004.bmp        /004_004/004.bmp        004_004/004.bmp
 ./005_005/005.bmp        /005_005/005.bmp        005_005/005.bmp
 ./006_006/006.bmp        /006_006/006.bmp        006_006/006.bmp

尝试这个:

  • 命令行:
cd /d "C:\Users\rivers\Desktop\data hd\texture"  && for /f useback^tokens^=*^delims^= %i in =;(` type .\"list_dir_files.txt" `);= do @set "_str=" &  =;@( set "_str=%CD%\%~i" & call move /y .\"%~nxi" "%_str:/=\%" || call echo; Check: .\"%~nxi" "%_str:/=\%" );= 2>nul
  • 沐浴档案:
@echo off

cd /d "C:\Users\rivers\Desktop\data hd\texture" 2>nul || exit /b 

for /f useback^tokens^=*^delims^= %%i in =;(` type .\"list_dir_files.txt" `);= do set "_str=" & 2>nul =;(
     set "_str=%CD%\%%~i" & call move /y .\"%%~nxi" "%%_str:/=\%%" || call echo; Check: .\"%%~nxi" "%%_str:/=\%%" 
    );=


其他资源:

答案2

抱歉回复晚了。我终于得到了答复!你的努力得到了回报。

@echo off

cd /d "C:\Users\complete\texture" 2>nul || exit /b 
           
for /f usebackq^tokens^=*^delims^= %%i in =;(` type .\"ListedFiles.txt"
    `);= do 2>nul move /y .\"%%~nxi" "%%~i" || echo; Check: .\"%%~nxi" "%%~i"

观察:您的文件夹列表中列出的项目是否包含双引号都不会影响结果。

如果文件中列出的文件夹不存在,需要创建才能将文件移动到该文件夹​​,请使用robocopy以下move命令:


@echo off

cd /d "C:\Users\complete\texture" 2>nul || exit /b 
           
for /f ^usebackq^tokens^=*^delims^= %%i in =;(` 
     type .\"ListedFiles.txt" ^| findstr . `);= do 2>nul =;( 
         robocopy .\. "%%~dpi\." "%%~nxi" /mov /njh | find "100%"
        );= || echo; Check Your Folder\File path: "%%~dpi" "%%~nxi"

答案3

重复错误可能意味着您尝试移动的文件已存在于目标中?移动前请检查文件是否存在

@echo off
set dir=C:\Users\user\texture\
set mask=ListedFiles.txt

cd "%dir%"
for /r %%# in (%mask%) do (
    if exist "%%~nx#" (
        echo File "%%~nx#" already exists.
    ) else (
        echo move "%%~#" "%%~nx#"
        echo mklink /h "%%~#" "%%~nx#"
    )
)
pause

让我知道这个是否奏效

答案4

您没有回复我的请求,给出 ListedFiles.txt 中内容的示例,所以我必须根据您从那时起所做的更改进行猜测。

如果我正确理解了您的问题,您想将 *.bmp 移动到具有相同名称的子文件夹中。

代码如下:

cd /d C:\Users\user\texture\

for %%f IN (*.bmp) DO move "%%f" "%%~nf\%%f"

示例移动如下:将 myimg.bmp 移动到 myimg\myimg.bmp

请记住,/r 是递归模式,它不起作用,因为它会找到同一个文件,陷入无限循环,将文件沿着无限路径不断推下去,直到超过最大深度。

此外,该目录也必须存在。

相关内容