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

时间:2011-11-29 13:54:13

标签: windows batch-file

我需要能够

  • 在目录及其子目录中搜索扩展名为.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
    )
)

1 个答案:

答案 0 :(得分:1)

@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
    )
)

<强>附录

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

对于扩展名为.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
        )
    )
)

如果这仍然不是您想要的,请详细说明您想要的内容!