У меня возникли проблемы с командой FOR DO в файле .BAT, над которым я работаю. Вот весь код, я работаю сАнализ с помощью команды FOR в файле .BAT
SET parent="%~dp0"
SET GroomedDir="%~dp0Groomed\"
XCOPY /s/e/y Groomed %parent%NewGroomed\
CD NewGroomed
setlocal enabledelayedexpansion
FOR %%i in (IMG_*.jpg) DO (
SET OldName=%%i
SET ImgNumber=!OldName:~4,-4!
SET DBLookup=FINDSTR !ImgNumber! Database.txt
!DBLookup! > return.txt
FOR /F "tokens=1-5 delims=|" %%J in (return.txt) do (
REN !OldName! "%%K_%%L.jpg"
MKDIR %%M\%%N
MOVE "%%K_%%L.jpg" %%M\%%N
)
)
del return.txt
endlocal
cd ..
ren Groomed "Groomed Backup"
ren NewGroomed Groomed
Беда придет в строках 12-14 (я ставлю в разделители строк). Я не могу поместить переменную% DBLookup% в команду FOR, и вместо этого я вынужден вместо этого использовать текстовый файл-заполнитель. В конце концов, это работает, но не лучше ли сохранить операцию записи в return.txt и прочитать операцию return.txt?
Для связи return.txt содержит одну строку из текста, как это:
115525 | Last_First | 5233 | 8 | Учитель
Я использую для команды, потому что это позволяет мне разграничить с помощью символ трубы или что-то еще, и выводятся в переменные %% J %% K %% L %% M и %% N.
Любая помощь или совет для этого родственника новенького очень ценится!
Вот мой код с моими комментариями:
REM THESE FOUR LINES:
REM 1) SET A VARIABLE FOR THE PARENT DIRECTORY LOCATION,
REM 2) SET A VARIABLE FOR THE GROOMED DIRECTORY,
REM 3) COPY THE GROOMED DIRECTORY TO "NEWGROOMED\",
REM 4) CHANGE THE LOCATION TO BE WORKING ENTIRELY WITHING NEWGROOMED\
SET parent="%~dp0"
SET GroomedDir="%~dp0Groomed\"
XCOPY /s/e/y Groomed %parent%NewGroomed\
CD NewGroomed
REM THIS FOR LOOP LOADS ALL JPGS IN THE \NEWGROOMED\ DIRECTORY THAT BEGIN WITH THE STRING, "IMG_"
setlocal enabledelayedexpansion
FOR %%i in (IMG_*.jpg) DO (
SET OldName=%%i
REM THIS LINE COPIES THE OLD NAME MINUS THE FIRST FOUR CHARACTERS, "IMG_", AND MINUS THE EXTENSION (LAST 4 CHARS)
SET ImgNumber=!OldName:~4,-4!
REM THESE NEXT TWO LINES LOOK UP OUR IMAGE NUMBER IN DATABASE.TXT AND RETURN THE ENTIRE LINE TO A NEW FILE CALLED RETURN.TXT
SET DBLookup=FINDSTR !ImgNumber! Database.txt
!DBLookup! > return.txt
REM NOW WE PARSE RETURN.TXT USING PIPE DELIMITERS INTO THE VARIABLES J,K,L,M,N (ID,Name,IMG#,Grade,Homeroom)
FOR /F "tokens=1-5 delims=|" %%J in (return.txt) do (
REN !OldName! "%%K_%%L.jpg"
MKDIR %%M\%%N
MOVE "%%K_%%L.jpg" %%M\%%N
)
)
del return.txt
endlocal
cd ..
ren Groomed "Groomed Backup"
ren NewGroomed Groomed
В целом, моя цель состоит в том, чтобы начать с папкой «ухоженная» с кучей картинок титулованных как таковой: IMG _ #### JPG..
Моего пакетный файл:
1) создать резервную копию всей исходной директории
2) переименовать каждое изображение в соответствии с database.txt файлом
3) переместить каждое переименованное изображение в папка нового класса/чашечки
Я начинаю с файла (database.txt), который приходит ко мне от другого сотрудника. Файл представляет собой простой список для каждого учащегося в следующем формате: student id | lastname_firstname | image # | grade # | teahername.
Как я упомянул. Файл работает отлично, но поскольку я новичок в пакетных файлах, я чувствовал, что мне может быть неловко писать в файл-файл, чтобы сохранить строку, а затем удалить ее. Это переменные, но мне пришлось с трудом перебирать эту переменную в команду FOR.
образец Database.txt
659968|Saperstein_Ryan|4603|7|Hallock
015520|Qian_Emily|2528|7|Hallock
528852|Rizzo_Jason|4618|7|Krukowski
и несколько имен файлов, я начинаю с:
IMG_2528.jpg
IMG_4544.jpg
IMG_7044.jpg
IMG_6880.jpg
IMG_4839.jpg
Эй Пол, я вставить свою комментировал версию в большом блоке в конце моего вопроса. БЛАГОДАРЯ! – Chucksef
Редактировать: здесь форматы плохо, поэтому я добавлю его в конец вопроса еще раз! – Chucksef
Точно исправить при переименовании. Я хочу знать, как объединить имя файла и одновременно удалить Img_. – Chucksef