Переименовать файл, используя командный файл - PullRequest
0 голосов
/ 27 декабря 2018

Я знаю, что есть много примеров этого, но я просто не могу получить это, и это не должно быть ТАК сложно, но я считаю, что это так.

У меня есть папка с 4 файлами в ней:

rtcc_current_pnp_data1-2018-12-26-061000.txt
rtcc_current_pnp_data2-2018-12-26-061000.txt
rtcc_current_pnp_data3-2018-12-26-061000.txt
rtcc_current_pnp_data4-2018-12-26-061000.txt

дата / время в конце меняется ежедневно.

Каждый день я хочу запустить командный файл, чтобы переименовать их в:

data1.txt 
data2.txt
data3.txt 
data4.txt

Вот и все ... Может кто-нибудь, пожалуйста, помогите мне извлечь правильное имя из файлов и переименовать их?

Итак, я попробовал это, и ничего не происходит:

for %%A in (\\apdwhdb01\D$\ProbationImportFolder\Current\rtcc*.*) do (
  set "filename=%%A"
  set "newName=EXP_!filename:~18!"

  rem ** remove the ECHO when it seems to work
  ren !filename! !newName!
)

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018
@echo off

pushd "\\apdwhdb01\D$\ProbationImportFolder\Current" || exit /b 1

for %%A in (data1 data2 data3 data4) do (
    for %%B in ("rtcc_current_pnp_%%~A-20*.txt") do (
        ren "%%~B" "%%~A.txt"
    )
)

popd

pushd отобразит общий сетевой ресурс на временный подключенный диск.|| - если команда слева не выполнена, выполните команду справа, то есть exit /b 1, которая завершает сценарий.

Цикл for перебирает data1, data2, data3 и data4.

Вложенный цикл for выполняет итерацию имен файлов, используя %%A со значением, например, data1, и использует подстановочный знак для изменения метки даты.%~B - текущее имя файла, которое переименовано в %%~A.txt, в котором %%~A содержит текущее значение, то есть data1.~ in %%~A - это модификатор, который удаляет окружающие двойные кавычки.

popd восстановит предыдущий текущий рабочий каталог, который pushd изменился.Он должен удалить временный подключенный диск.

Чтобы получить справку по команде, используйте, например, pushd /?, которая выведет справочную информацию.for /? выводит справочную информацию о for, ren /? ... и т. Д.

0 голосов
/ 27 декабря 2018

Пример двухстрочного сценария:

@PushD "\\apdwhdb01\D$\ProbationImportFolder\Current" 2>Nul || Exit /B
@For %%A In ("rtcc_*.txt") Do @For /F "Tokens=4 Delims=_-" %%B In ("%%A") Do @Ren "%%A" "EXP_%%B%%~xA"

Для получения информации об используемых командах откройте командную строку и введите каждое из:

PushD/?
Выход /?
Для /?
Рен /?

0 голосов
/ 27 декабря 2018

Самый простой способ это сделать:

 ren "\\apdwhdb01\D$\ProbationImportFolder\Current\*data1*.txt" data1.txt
 ren "\\apdwhdb01\D$\ProbationImportFolder\Current\*data2*.txt" data2.txt
 ren "\\apdwhdb01\D$\ProbationImportFolder\Current\*data3*.txt" data3.txt
 ren "\\apdwhdb01\D$\ProbationImportFolder\Current\*data4*.txt" data4.txt

Однако проблема, с которой вы, вероятно, сталкиваетесь, заключается в том, что сетевое соединение не активно / недействительно для вашего соединения.Самый простой способ выяснить это с помощью этого:

 dir "\\apdwhdb01\D$\ProbationImportFolder\Current"

Если он вернет ваш список файлов, то все в порядке.Если нет, то сначала вам нужно сопоставить диск в том же пакетном файле:

 :: temporarily map the network share to the Q: drive.
 :: make sure you update the username and password
 net use q: "\\apdwhdb01\D$\ProbationImportFolder\Current" /user:MyUserName myPassword

 :: rename the files
 ren "q:\*data1*.txt" data1.txt
 ren "q:\*data2*.txt" data2.txt
 ren "q:\*data3*.txt" data3.txt
 ren "q:\*data4*.txt" data4.txt

 :: remove the mapped drive
 net use q: /delete
...