我对 DOS 批处理文件有点陌生,我很难思考解决问题的方法。
我需要做的:我有一个大型的嵌套源文件夹结构,假设它位于此处:
C:\dir1\dir2\dir3\file.txt
而且我有一个镜像的目标结构,尽管根的一部分不同:
x:\dirA\dirB\dir1\dir2\dir3\file.txt
我当前的批处理将源结构中的所有文件复制到目标文件夹,保持文件夹结构,这是我想要的。
问题:
我的脚本的目的是将一个文件夹从上面的源结构拖到 bat 文件上,并让它将文件复制到目标。我想要做的是允许用户从源目录中拖动一个文件夹,假设/dir2
它的所有子文件夹/文件到批处理文件中,并将内容复制到目标结构中的相同位置.. .
所以在这个例子中,批处理文件应该复制下面的所有内容:
C:\dir1\dir2\
进入
x:\dirA\dirB\dir1\dir2\.
幸运的是(我认为)我的目标文件夹结构不会改变,尽管源可能位于每台机器上的不同位置。所以,如果有一个聪明的方法来检测我在源树中的位置,然后替换目标路径的一部分...... ???
到目前为止,这是我的简单脚本:
@echo off
set /p FILETYPE="What file type do you want to copy? (For example use txt, max, f3d, or * to copy all files.)"
xcopy %1\*.%FILETYPE% c:\output /s
pause
非常感谢你们可以提供的任何帮助!:) 肯
更新:在这里添加更新的代码示例,因为我无法让我的评论格式化或允许我足够的字符。下面的东西可能并不完全正确,我只是尽力说清楚。自从我发布这篇文章以来,我已经想出了更多,基本上我需要弄清楚如何(或者如果可能的话)在 delims 之后使用字符串,它似乎只检查每个字符......
@echo off
rem user drag folder onto .bat (left click, move folder using mouse onto .bat icon)
rem %1 in ex is C:\random_folder\another_folder\proj1\area1\scene23
set destRoot=X:\companyname\allprojects\proj1
set rootDir=proj1
rem assume %1 is folder dragged onto .bat file
for /f "tokens=2* delims=<foldername???>" %%a in ("%1") do (
set part1=%%a
set chunk=%%b
)
set finalDest=destRoot+chunk
xcopy %1\* %finalDest% /E /EXCLUDE:exclusions.txt
pause
我希望创建这个:“X:\companyname\allprojects\proj1\area1\scene23”