Batch file 如何通过向文件名添加递归路径将嵌套目录结构的所有文件复制到一个新目录中?

Batch file 如何通过向文件名添加递归路径将嵌套目录结构的所有文件复制到一个新目录中?,batch-file,cmd,batch-rename,Batch File,Cmd,Batch Rename,也许有些人可以在我的问题上给我一些帮助:学生们通过MS团队作业上传他们的java代码,我想在本地查看(并相互比较) 作为一名教师,我可以大量下载所有提交的内容。提取zip将显示以下结构: 根 学生姓名 项目1 版本1 file1.java 也许还有其他文件,比如file1.class、myfirstcodepassedinword.doc、screenshotofcode.jpg 版本2//可选 file1.java 子目录//可选 otherfile.class 下捷航空

也许有些人可以在我的问题上给我一些帮助:学生们通过MS团队作业上传他们的java代码,我想在本地查看(并相互比较)

作为一名教师,我可以大量下载所有提交的内容。提取zip将显示以下结构:

    • 学生姓名
      • 项目1
        • 版本1
          • file1.java
          • 也许还有其他文件,比如file1.class、myfirstcodepassedinword.doc、screenshotofcode.jpg
        • 版本2//可选
          • file1.java
          • 子目录//可选
            • otherfile.class
            • 下捷航空
              • lastfile.txt
      • 项目2
        • 版本1
    • 学生2姓名
      • 项目1
        • 版本1
          • nextClass.java .. 等等
我要找的是一个小批量,收集所有项目单独提交在一个目录一起(能够做简单的比较)。 为了便于识别,必须将学生姓名和所有前导子目录添加到新文件名中

因此,在调用“collectSubmissions.bat”之后,结果应该是一个名为“Submissions”的新目录,其中包含以下所有文件:

  • 项目1
    • student1name-version1-file1.java
    • student1name-version1-file1.class(可以省略,但是太费劲了,我将手动忽略)
    • student1name-version1-myfirstcodeinword.doc
    • student1name-version1-screenshotofcode.jpg
    • student1name-version2-file1.java
    • student1name-version2-subdir-otherfile1.class
    • student1name-version2-subdir-nextsubdir-lastfile.txt
    • student2name-version1-file1.java
  • 项目2
    • student1name-version1-nextClass.java
我做了一些研究,尝试了不同的方法(开始),发现其中一种非常接近我的需要:

但此处仅使用最接近的父目录名。但在我的例子中,可以有多个嵌套文件夹,所以我希望有人能给我一些建议如何做到这一点

非常感谢您的帮助

@ECHO关闭
SETLOCAL ENABLEDELAYEDEXPANSION
rem源目录、目标目录、目标目录的以下设置,
rem批处理目录、文件名、输出文件名和临时文件名[如果显示]是名称
我用于测试的rem,故意包含包含空格的名称,以确保
rem确认流程使用这些名称工作。这些将需要改变,以适应您的情况。
设置“sourcedir=u:\your files”
设置“destdir=u:\your results”
设置“删除=%sourcedir:\=-%”
对于/f“delims=“%%b IN('dir/b/s/a-d”%sourcedir%\*“)DO(
设置“全名=%%b”
对于(“!全名:%sourcedir%\=!”)中的/f“tokens=1,2*delims=\”%%u,请执行以下操作(
MD“%destdir%\%%v”2>NUL
设置“newname=%%u-%%w”
设置“newname=!newname:\=-!”
复制“%%b”“%destdir%\%%v\!newname!”>nul
)
)
后藤:EOF
至于实用性(假设这是一个检测剽窃的练习)

学生可以通过以下方式使检测变得困难:

  • 更改文件中的空白
  • 更改变量/方法名称
  • 更改文件中定义方法的顺序
  • 更改语句顺序(例如,X、Y、Z变为Z、Y、X,其中这些语句不相互依赖)
  • 更改语句中术语的顺序(例如
    x+3
    3+x
    不相同,但会产生相同的结果)

…和其他人

发布的代码正是我想要的-我非常感谢您的工作和时间。还感谢您关于“代码混淆”的想法-您完全正确,我需要将所有文件放在一个大目录中进行比较和“低级”剽窃检测。我已经使用了好几年了,这对于一种语义分析来说足够“聪明”,所以改变变量名等不会改变结果。对我来说,它很好地完成了这项工作,有助于轻松发现懒惰和想要聪明的人:)