2

Я пытаюсь переименовать группу файлов htm с помощью команды ren командной строки, но она не дает желаемого результата.

У меня есть файлы с xyz_alb.htm , xyz_bla.htm ... и т.д., Расположенные в разных папках, и я хочу переименовать их в zxy_alb.htm , zxy_bla.htm и т.д.

Я попробовал следующий код:

for /r %x in (xyz*.htm) do ren "%x" zxy*.htm

Но это заменяет полное имя файла, я получаю вывод, как это:

zxy.htm, zxy.htm...

Как я могу изменить этот код, чтобы получить желаемый результат?

Я заменяю 'NAMU_abl.htm' на 'KALKINSTA_abl.htm' во всех папках и подпапках.

3 ответа3

0

Для этого я использую бесплатный инструмент StExBar, расширение для проводника. Очень удобно и имеет больше возможностей. Информация и загрузка: StExBar

0

ren xyz*.htm zxy*.htm может быть правильно интерпретирована только тогда, когда команда ren сама выполняет обработку символов подстановки. Вы обрабатываете шаблон с помощью команды for , и ren видит это каждый раз:

ren xyz_alb.htm zxy*.htm

Поскольку он не имеет подстановочного знака для сопоставления, он не знает, какую часть исходного файла использовать для замены, и поэтому он разрешает:

ren xyz_alb.htm zxy.htm

Итак, что вы хотите сделать, это пройтись по каталогам, а затем сделать переименование в каждом из них:

for /d /r %x in (*) do cd "%x" && ren xyz*.htm zxy*.htm

/d означает только каталоги, а /r повторяется как обычно. %x становится именем каталога, поэтому мы меняем каждый каталог, и любые файлы, соответствующие первому параметру, будут переименованы. Вы хотите начать это выше первой папки, содержащей файлы, которые будут переименованы.

0

после стольких попыток это не нашло правильного решения, поэтому попробовал через Java с помощью моего коллеги .. спасибо ему.

Хотел бы поделиться тем же, если кому-то это нужно.

import java.io.File;

/**
 * This class is search with start file character sequence and replace the file name with new character. 
 * @author nitin.choube
 *
 */

public class  SearchAndReplaceFileName
{
    public static void main(String[] args) 
    {
        //Parent file path from start searching files
        File dir = new File("D:\\WS\\Upload");
        // replace character string
        final String replaceChar="XYZ";
        // replace character string with
        final String replaceCharWtih="ALB";         
        // file extension
        final String fileExtension=".htm";

        if(dir.isDirectory()){

            File[] children = dir.listFiles();
            iterateFile(children,replaceChar,replaceCharWtih,fileExtension);

        }       
    }

    /**
     * This method is allow to search and replace file name.
     * @param children
     * @param replaceChar
     * @param replaceCharWtih
     * @param fileExtension
     */
    public static void iterateFile(File[] children,String replaceChar,String replaceCharWtih,String fileExtension){
        try {

            for (int i=0; i<children.length; i++) {

                // Get filename of file or directory

                File file = children[i];

                System.out.println("Getting all files in " + file.getCanonicalPath() + " including those in subdirectories");

                  if(file.isDirectory()){

                      File[] child = file.listFiles();

                      iterateFile(child,replaceChar,replaceCharWtih,fileExtension);

                  }else if(file.isFile()){

                      String extension = file.getName().substring(file.getName().lastIndexOf("."));

                      System.out.println("extracted file name is "+file.getName()+" and extension is ="+extension);

                      if(extension.equals(fileExtension)){

                          String fileName=file.getName().substring(0,file.getName().lastIndexOf(fileExtension));

                          if(fileName.startsWith(replaceChar)){

                              String newFileName=fileName.replace(replaceChar,replaceCharWtih);
                              file.renameTo(new File(file.getCanonicalPath().substring(0,file.getCanonicalPath().lastIndexOf("\\"))+"\\"+newFileName+fileExtension));

                          }else if(fileName.contains("_"+replaceChar+"_")){

                              String newFileName=fileName.replace(replaceChar,replaceCharWtih);
                              file.renameTo(new File(file.getCanonicalPath().substring(0,file.getCanonicalPath().lastIndexOf("\\"))+"\\"+newFileName+fileExtension));
                          }
                      }
                  }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .