#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 называется именно так, как я хочу, в виде текста. Работа выполнена!