имена файлов после bat-файла шаблона — используемый CMD-код

#variables #cmd #rename #filenames #splice

#переменные #cmd #переименовать #имена файлов #сращивание

Вопрос:

У меня есть файл * .bat в разных папках, который переименовывает определенные файлы, поэтому номер проекта, название проекта и инициалы включены в имя файла. Пока что при запуске файла пользователю будет предложено ввести номер проекта, название проекта и инициалы, которые сохраняются как переменные (no, project и initial). Каждое исходное имя файла сохраняется, но в скобках будут указаны требуемые данные для конкретных проектов). Пока это работает, но я хотел бы настроить пакетный файл, в котором имя задает шаблон для конкретных данных проекта, например, имя файла bat-файла может быть: Переименовать <XY00.000> (Имяпроекта),XYZ.bat Если в коде CMD вы можете получить имя файлаисполняемый файл bat (должен быть только 1 в папке), а затем с помощью разделителей вы должны объединить имя файла и сохранить соответствующие строки в разных переменных, например, то, что внутри <> будет переменной «no«, что внутри () будет переменной «project«, а то, что находится за пределами, является»начальный«. Если у меня есть эти переменные, переименование файла выполняется так же, как в моей текущей процедуре. Пожалуйста, помогите, поскольку я не знаком с CMD-кодом или Powershell (что может быть альтернативным вариантом), и мне потребовалось много времени, чтобы собрать существующий код. В принципе, я хочу изменить входную часть (см. set / p) на что-то, что делает:

  • получить имя файла bat-файла
  • извлеките 3 текстовые строки из имени файла (используйте разделители, такие как ( < ,)
  • сохраните 3 текстовые строки в качестве параметров (NO, PROJECT, INITIAL)
  • затем остальная часть существующего кода должна работать для переименования файлов в папке

Спасибо.

Существующий код в качестве примера ниже:

 cls
    echo off

    pushd "%~p0" 2> nul
    pushd "\%~p0" 2> nul
    
    echo


attrib -r *.* /s

set /p no= Enter Project Reference in style XY00.000:
set /p project= Enter Project name (without any underscores):
set /p initial= Enter your Initials:


for /f "tokens=1* delims=(" %%i in ('dir /b *.xlsm') do ren "%%i(%%j" "%%i(%no% %project%_%initial%).xlsm"
for /f "tokens=1,2* delims=()" %%i in ('dir /b *.docm') do ren "%%i(%%j)%%k" "%%i(%no% %project%_%initial%)%%k"
 

Комментарии:

1. [1] получить ввод пользователя с Read-Host помощью . [2] получить имена файлов с Get-ChildItem помощью . [3] переименуйте текущий файл с Rename-Item помощью amp; .BaseName этого файла и сохраненного пользовательского ввода. ///// я бы использовал оператор -f string format для последнего из них.

2. спасибо за ответ. Чтобы было ясно, исходный код работает идеально, и, насколько я могу судить, ваша версия делает то же самое. Моя задача — изменить его, чтобы вам не нужен пользовательский ввод (ввод текста). Идея заключалась в том, что файл bat имеет определенное имя с разделителями, поэтому код считывает это конкретное имя файла и разделяет его на разные части, которые будут сохранены как переменные, как указано. Переименование файлов уже работает. Приветствия.

3. ваш опубликованный код — это код BAT / CMD, а не код powershell. вам действительно нужен код powershell? ///// если вы хотите что-то прочитать из файла, вам нужно будет указать точные шаги, которые вы хотите выполнить. для наглядности сделайте это в виде списка , а не абзаца. я все еще не уверен, чего вы на самом деле хотите… [ покраснение ]

4. Извините за путаницу. Мне нужен исполняемый файл, который запускает некоторые команды для переименования файлов, которые находятся в одной папке. Пока мой исправленный вместе cmd-код работает, но пользователь должен ввести информацию, хранящуюся в 3 параметрах (No, project и initial).

5. Я хотел бы использовать некоторую автоматизацию вместо ввода. Если какая-либо команда может считывать имя файла bat, тогда эта информация может быть использована. Файл назван в стиле, в котором вы можете использовать разделители, такие как скобки или запятые, для разделения текстовых битов (номер проекта, название проекта и инициалы) и присвоить эту информацию 3 параметрам (no, project, initial). Затем остальная часть команды с переименованием файлов должна выполнить свою работу.

Ответ №1:

Я заменил пользовательский ввод на:

 set infovariable=%~n0
 

который сохраняет имя файла bat в качестве переменной и использует его позже для переименования соответствующих файлов с его помощью. Файл bat называется именно так, как я хочу, в виде текста. Работа выполнена!