大家好。我在这个网站上研究过这个问题,但找不到我想要的答案。抱歉,我发了与其他帖子类似的内容。
我有一个文本文档“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 是递归模式,它不起作用,因为它会找到同一个文件,陷入无限循环,将文件沿着无限路径不断推下去,直到超过最大深度。
此外,该目录也必须存在。