查找某些文件的扩展名,获取路径,文件复制到路径,在文本文件中

问题描述:

记录路径,我需要能够查找某些文件的扩展名,获取路径,文件复制到路径,在文本文件中

  • 搜索目录及其与扩展特定文件的子目录。 ac每个目录只有一个。
  • 然后,我需要能够将一些文件复制到其中包含* .ac的目录中。当文件被复制时,它们需要与没有扩展名的* .ac文件具有相同的名称。所以如果* .ac文件是foobar.ac我需要能够将foobarMS.cvw复制到目录。它可以只复制一个文件,但将其重命名为适合目录。
  • 一旦完成复制文件,把它保存在一个文本文件,路径
  • 这将循环,直到它已通过所有子目录不见了

当我再次运行该脚本,这将是很高兴能够交叉引用已完成目录的列表,因此不必再次复制到它们。或者,如果速度更快,可以忽略交叉引用列表并只复制命令而不覆盖。

我到目前为止,但把它放在一起正在让我悲伤。

我能够通过列出* .AC文件的目录:

for /d /r %%a in (*) do @if exist %%a\*.ac (echo %%a) 

这是我到目前为止有:

@echo off 
cls 
for /D /R %%a in (*) do @if exist "%%a\*.ac" (
    if not exist "%%a\%%~Nacb.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Nacb.cvw">nul 
    ) 
    if not exist "%%a\%%~Naia.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Naia.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzcd.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzcd.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzcpl.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzcpl.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzlnr.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzlnr.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzms.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzms.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzmt.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzmt.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzmu.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzmu.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzmv.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzmv.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzmw.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzmw.cvw">nul 
    ) 
    if not exist "%%a\%%~Nalt.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Nalt.cvw">nul 
    ) 
    if not exist "%%a\%%~Nams.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Nams.cvw">nul 
    ) 
    if not exist "%%a\%%~Namt.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Namt.cvw">nul 
    ) 
    if not exist "%%a\%%~Namu.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Namu.cvw">nul 
    ) 
    if not exist "%%a\%%~Namv.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Namv.cvw">nul 
    ) 
    if not exist "%%a\%%~Namw.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Namw.cvw">nul 
    ) 
    if not exist "%%a\fixed" (
     copy .\jzitfix.cvw "%%a\fixed">nul 
     echo FIXED: %%~Na 
     echo %%~Na >> fixed.txt 
    ) 
) 

@echo off 
rem in the FOR loop %%~Pa is the directory name and %%~Na the file name 
for /R %%a in (*.ac) do (
    if not exist %%~Pa%%~NaMS.cvw (
     copy \fixed\path\%%~NaMS.cvw %%~Pa 
     echo %%~Pa>> textfile.txt 
    ) 
) 

附录

对不起,也许我误解了一些观点。根据您的描述第一,我的代码执行以下操作:

FOR与.AC扩展每个路径\文件(例如,“foobar.ac”): 复制具有相同的名称加上“MS”和文件将.cvw扩展名(例如“foobarMS.cvw”)扩展为相同的路径并将该路径保存在文本文件中,但前提是该文件不存在。

我从你的要求中推导出最后一部分(“只有当这个文件不存在”时):“当我再次运行脚本时,它将很好......不必再次复制到它们或者......只是让复制命令不覆盖“)。

你的解释清楚地说:“当文件被复制时,它们需要与没有扩展名的* .ac文件具有相同的名称......”和“复制完文件后,将该路径保存在文本文件中“。所以,我不明白你的第二个例子的多个名字来自哪里。

也许你的第一描述不清,应该是:

  • 搜索目录及其子目录与.AC扩展名的特定文件。
  • 检查存在一系列扩展名为.cvw的固定名称文件的路径;每个名称都以.ac文件的相同名称开头,后跟其中一个字符串:cb ia ... mw。如果其中一个文件不存在,请将文件\ jzitfix.cvw复制到该路径和名称。

如果是这样的话,那么我不知道什么时候“保存为文本文件路径”:当每个文件被复制(重复每个丢失的文件相同的路径)?或者只是每个路径一次?或者只有至少有一个文件被复制?

批处理文件下面是按照以前的描述修改后的版本:

@echo off 
rem in the FOR loop %%~Pa is the directory name and %%~Na the file name 
for /R %%a in (*.ac) do (
    for %%b in (cb ia etc mw) do (
     if not exist %%~Pa%%~Na%%b.cvw (
      copy .\jzitfix.cvw %%~Pa%%~Na%%b.cvw > nul 
     ) 
    ) 
) 

如果这仍然不是你想要的,那么请用更多的细节和你想要的例子解释了!

+0

我会试试这个。 – qroberts

+0

哇这是美丽的。有批量的数组吗?会更好,因为我需要为16个文件做一个副本。 – qroberts

+0

@qroberts:查看我的附录... – Aacini