У меня есть файлы, как показано ниже:Как переименовать файлы с частью имени папки?
H: \ 1 \ PICTURES \ некоторые \ реж \ sdir1 [60] 19 \ [0] - [30] 15 [60] - [ 65] - [999] abc.jpg
H: \ 1 \ \ ИЗОБРАЖЕНИЯ некоторые \ DIR \ sdir200 \ ssdir5 [60] 22 \ [0] 20 [30] 15 [60] - [65 ] 22 [999] abcd.jpg
H: \ 1 \ ИЗОБРАЖЕНИЯ \ некоторые \ DIR \ sdir20 [60] 218 \ [0] - [30] 15 [60] - [65] 100 [ 999] 21ade.jpg
Н: \ 1 \ \ ИЗОБРАЖЕНИЯ некоторые \ DIR \ sdir33 [60] 335 \ [0] - [30] 15 [60] - [65] 31 [999] 2ade.jpg
H : \ 1 \ ИЗОБРАЖЕНИЯ \ некоторые \ DIR \ sdir5 [60] 26 \ [0] - [30] 15 [60] - [65] - [999] 1abc4.jpg
H: \ 1 \ \ ИЗОБРАЖЕНИЯ некоторые \ DIR \ sdir8000 [60] 525 \ [0] - [30] 15 [60] - [65] - [999] abc4.jpg
Н: \ 1 \ ИЗОБРАЖЕНИЯ \ some2 \ dir \ sdir7 [61] 12 \ [0] - [30] 15 [61] - [65] - - [999] abc5.jpg
H: \ 1 \ ИЗОБРАЖЕНИЯ \ some2 \ DIR \ sdir33 [61] 25 \ [0] - [30] 15 [61] - [65] - [ 999] ffc5.jpg
Что я хочу переименовать с партией в:
H: \ 1 \ PICTURES \ некоторые \ реж \ sdir1 [60] 19 \ [0] - [ 30] 15 [60] 19 [65] - [999] abc.jpg
H: \ 1 \ PICTURES \ some \ dir \ sdir200 \ ssdir5 [60] 22 \ [0] 20 [30] 15 [60] 22 [65] 22 [ 999] abcd.jpg
H: \ 1 \ PICTURES \ some \ dir \ sdir20 [60] 218 \ [0] - [30] 15 [60] 218 [65] - [999] 21ade.jpg
Н: \ 1 \ \ ИЗОБРАЖЕНИЯ некоторые \ DIR \ sdir33 [60] 335 \ [0] - [30] 15 [60] 335 [65] 31 [999] 2ade.jpg
Н: \ 1 \ PICTURES \ some \ dir \ sdir5 [60] 26 \ [0] - [30] 15 [60] 26 [65] - [999] 1abc4.jpg
H: \ 1 \ PICTURES \ some \ dir \ sdir8000 [60] 525 \ [0] - [30] 15 [60] 525 [65] - [999] abc4.jpg
H: \ 1 \ PICTURES \ some2 \ dir \ sdir7 [61 ] 12 \ [0] - [30] 15 [61] 12 [65] - [999] ab c5.jpg
Н: \ 1 \ ИЗОБРАЖЕНИЯ \ some2 \ DIR \ sdir33 [61] 25 \ [0] - [30] 15 [61] 25 [65] - [999] ffc5.jpg
Последняя часть имени папки, начиная с [
, должна стать строкой, которая заменит строку, с которой начинается одно и то же число в новом имени файла.
Таким образом, замена [60] - с [60] 19 в первом примере.
Длина путей, строк и имен файлов является переменной.
Я знаю, что решение использует tokens
и delims
, но я не узнал, как получить правильные строки во всех случаях.
EDIT 1:
меня это до сих пор:
@ECHO OFF
SETLOCAL
setlocal EnableDelayedExpansion
SET "sourcedir=H:\1\Pictures\some\dir\sdir1 [60]19"
FOR /f "delims=" %%a IN (
'dir /s /b /a-d "%sourcedir%\*" '
) DO (
set newstr=%sourcedir:~-2,2%
ren "%%a" ????"(%newstr%)"????????????????????????????????
)
Вопросы у меня есть:
Файлы будут переименованы, но имеют
()
вместо19
.Путь жестко закодирован вместо переменной.
(Н: \ 1 \ Pictures` + переменная для некоторых \ DIR \ sdir1 [60] 19, some2 \ DIR \ sdir5 [60] 26 ...)В
set newstr=%sourcedir:~-2,2%
я установил фиксированные последние 2 позиции от имени пути. Возможно, необходимо иметь 3 позиции, например. [60] 225.В команде rename я использую ??? вместо переменных, не являясь решением для использования с переменным положением или длиной для элементов.
EDIT 2:
Я решил первый выпуск. set newstr=%sourcedir:~-2,2%
не работает.
Так что я изменил
ren "%%a" ????"(%newstr%)"????????????????????????????????
в
ren "%%a" ????"%sourcedir:~-2,2%"????????????????????????????????.
Но как знать, что там должно быть 2 или 3 цифры в %sourcedir%
?
[Эта ссылка] (https://blogs.msdn.microsoft.com/ben/2007/03/09/path-manipulation-in-a-batch-file/) может помочь –