由于我无法添加评论,我提出了一个相关的问题。
原始发布found here效果很好。
有没有办法将它与文件名列表一起使用?我已经看到了文件列表可以传递给ROBOCOPY命令的位置,但是我无法让它工作。
退后一步,我有一系列文件夹,其中有特定文件,我想复制到一个文件夹。我有一个文本文件,列出了这些文件的名称。
我正在寻找一个批处理例程,它将查找每个文件夹中文本文件中的每个文件,然后将文件复制到新文件夹中。
谢谢!
答案 0 :(得分:0)
测试一下 - file.txt
每行都有一个文件名。
它不处理文件名冲突。
@echo off
cd /d "c:\base\folder"
for /f "usebackq delims=" %%a in ("file.txt") do (
for /f "delims=" %%b in ('dir "%%a" /b /s /a-d ') do copy "%%b" "d:\target\folder"
)
答案 1 :(得分:0)
我最近不得不解决这个问题,我想从层次结构转移到单个文件夹的许多文件彼此具有相同的名称,我希望仍然可以将层次结构扁平化而不会覆盖它们。 我所做的是编写一个移动文件的脚本,但是使用名称中的旧层次结构路径重命名该文件 例如: 源文件:
C:\文件\ somefiles \ file.txt的
C:\文件\ otherfiles \ file.txt的
目的地是C:\ newdir \ 文件创建为
C:\ NEWDIR \ somefiles-file.txt的
C:\ NEWDIR \ otherfiles-file.txt的
这里是代码,批处理文件1通过文件,批处理文件2重命名并移动它们(如果你想保留源代码,也可以复制代码:
@echo off
for /r %%f in (*.*pr) do @renameandmovefilespart2.bat "%%f" "%%~ff" "%%~xf"
renameandmovefilespart2.bat
@echo off
Setlocal EnableDelayedExpansion
rem set the whole file path
set origWhole=%1
set origPathOnly=%2
set extension=%3
rem here you can set where the directory to hold the flattened hierarchy is
set destDir=c:\destinationDir\
rem set the directory to do a string replace
rem make this the starting directory, that you dont want in the newly renamed files
set startingDir=C:\starting\directory\
set nothing=
set slash=\
rem here you can set what the character to represent the directory indicator \ in the new files
set reaplcementDirectoryCharacter=--
set quote="
rem cut out the starting part of the directory
call set newname=%%origWhole:!startingDir!=!nothing!%%
rem replace slashes with new character
call set newname=%%newname:!slash!=!reaplcementDirectoryCharacter!%%
rem remove quotes
call set newname=%%newname:!quote!=!nothing!%%
rem @echo shortened: %newname%
rem @echo source path: %origPathOnly% newPath: %startingDir%
rem @echo extension: %extension%
rem rename the files
ren %origWhole% %newname%
rem prepare to move the file, clean up the source path
call set origPathOnly=%%origPathOnly:!quote!=!nothing!%%
move "%origPathOnly%%newname%" "%destDir%"