Найти определенные файлы с расширением, получить путь, скопировать файлы в путь, записать путь в текстовом файле - PullRequest
0 голосов
/ 29 ноября 2011

Мне нужно иметь возможность

  • Поиск в каталоге и его подкаталогах определенных файлов с расширением .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 Ответ

1 голос
/ 29 ноября 2011
@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
    )
)

ADDENDUM

Простите;возможно, я неправильно понял какой-то момент.Исходя из вашего первого описания, мой код выполняет следующие действия:

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

Если это все еще не то, что вы хотите,тогда, пожалуйста, объясните более подробно и с примерами, что вы хотите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...