Удалить часть имени файла в .bat файле - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь переименовать группу файлов в папке с помощью сценария .bat.

Исходное имя файла: S2A_MSIL2A_20200322T184031_N0214_R070_T11UPA _20200322T225116 _A03.n c

100 * Жирная часть (вторая дата / время) - это то, что я пытаюсь удалить

Имя файла цели: S2A_MSIL2A_20200322T184031_N0214_R070_T11UPA_A03.n c

Я пробовал это:

rename "S??_??????_???????????????_?????_????_??????_???????????????_???.nc" "S??_??????_???????????????_?????_????_??????_???.nc"

Различные разделы файла должны всегда иметь одинаковое количество символов, и все файлы начинаются с S и заканчиваются на .n c

... но, похоже, это не работает должным образом. Иногда файлы не переименовываются, а иногда переименовываются, но неправильно. Кто-нибудь может помочь? Я провел много поисков на stackexchange, чтобы попытаться выяснить это, но ни одно из других решений, похоже, не работает - какое регулярное выражение мне нужно для этого?

Вот еще несколько примеров файлов, которые нужно переименовать : S2A_MSIL2A_20200322T184031_N0214_R070_T12VVJ_20200322T231131_A03.nc S2A_MSIL2A_20200322T184031_N0214_R070_T12VVK_20200322T231131_A01.nc S2A_MSIL2A_20200322T184031_N0214_R070_T12VVK_20200322T231131_A02.nc S2A_MSIL2A_20200322T184031_N0214_R070_T12VVK_20200322T231131_A03.nc S2A_MSIL2A_20200322T184031_N0214_R070_T12VWK_20200322T231131_A01.n c

1019 * должны стать:

S2A_MSIL2A_20200322T184031_N0214_R070_T12VVJ_A03.nc S2A_MSIL2A_20200322T184031_N0214_R070_T12VVK_A01.nc S2A_MSIL2A_20200322T184031_N0214_R070_T12VVK_A02.nc S2A_MSIL2A_20200322T184031_N0214_R070_T12VVK_A03.nc S2A_MSIL2A_20200322T184031_N0214_R070_T12VWK_A01.n c

Ответы [ 3 ]

1 голос
/ 04 апреля 2020

В итоге я воспользовался предложением Алекса, но выяснил, как поместить его в скрипт .bat:

@echo off
setlocal ENABLEDELAYEDEXPANSION

cd /D %1

for %%F in (*.nc) do (
  set oldName=%%F
  set newName=!oldName:~0,44!!oldName:~60!
  rename !oldName! !newName!
)

Примечание:% 1 - это путь к папке с файлами, которые нужно переименовать (включено диск D:), предоставляемый в качестве аргумента для файла .bat в командной строке.

Что было важно, так это отсутствие пробела при определении переменных! (например, oldName = %% F не работает, но oldName = %% F работает)

0 голосов
/ 04 апреля 2020

Альтернативное решение с использованием FOR /F:

@echo off
FOR %%F in (*.nc) do ( 
FOR /F "tokens=1-8 delims=_" %%a in ("%%~nF") do ren "%%F" "%%a_%%b_%%c_%%d_%%e_%%f_%%h.nc"
)

Экран ie:

0 голосов
/ 04 апреля 2020

Использовать синтаксис подстроки %name:~start,length%:

> set name=S2A_MSIL2A_20200322T184031_N0214_R070_T12VVJ_20200322T231131_A03.nc
> echo %name%
S2A_MSIL2A_20200322T184031_N0214_R070_T12VVJ_20200322T231131_A03.nc
> echo %name:~0,44%%name:~60%
S2A_MSIL2A_20200322T184031_N0214_R070_T12VVJ_A03.nc
...