![]() |
Переименование каталогов
Добрый день!
Помогите, пожалуйста, реализовать следующее: В каталоге есть 10 подкаталогов типа: 100_0447, 100_0448 и пр. Нужно переименовать их, дописав в конец строки из текстового файла. В нём, к примеру, такое (1000) (750) (600) (500) (400) (300) (200) (100) (50) (25) Подкаталоги должны переименоваться так: 100_0447 (1000), 100_0448 (750) и т.д. Пробовал так: echo off setlocal ENABLEEXTENSIONS setlocal ENABLEDELAYEDEXPANSION dir /B /A:D >dir.txt For %%a In (1000 750 600 500 400 300 200 100 50 25) Do (Set /a cnt +=1& Set Arr[!cnt!]=%%a ) for /f "usebackq delims=" %%i in ("dir.txt") do (Set /a index +=1 echo i= %%i echo index= !index! echo !Arr[%%index]! echo !Arr[1]! !Arr[2]! !Arr[3]! !Arr[4]! !Arr[5]! !Arr[5]! !Arr[7]! !Arr[8]! !Arr[9]! !Arr[10]! ) pause Но почему-то, в цикле не выводятся элементы массива, хотя они определены: Скрытый текст
b:\test>echo off
i= 100_0447 index= 1 Режим вывода команд на экран (ECHO) отключен. 1000 750 600 500 400 400 200 100 50 25 i= 100_0448 index= 2 Режим вывода команд на экран (ECHO) отключен. 1000 750 600 500 400 400 200 100 50 25 i= 100_0449 index= 3 Режим вывода команд на экран (ECHO) отключен. 1000 750 600 500 400 400 200 100 50 25 i= 100_0450 index= 4 Режим вывода команд на экран (ECHO) отключен. 1000 750 600 500 400 400 200 100 50 25 i= 100_0451 index= 5 Режим вывода команд на экран (ECHO) отключен. 1000 750 600 500 400 400 200 100 50 25 i= 100_0452 index= 6 Режим вывода команд на экран (ECHO) отключен. 1000 750 600 500 400 400 200 100 50 25 i= 100_0453 index= 7 Режим вывода команд на экран (ECHO) отключен. 1000 750 600 500 400 400 200 100 50 25 i= 100_0454 index= 8 Режим вывода команд на экран (ECHO) отключен. 1000 750 600 500 400 400 200 100 50 25 i= 100_0455 index= 9 Режим вывода команд на экран (ECHO) отключен. 1000 750 600 500 400 400 200 100 50 25 i= 100_0456 index= 10 Режим вывода команд на экран (ECHO) отключен. 1000 750 600 500 400 400 200 100 50 25 Для продолжения нажмите любую клавишу . . . |
В пакетных файлах отсутствует такое понятие, как «массив».
Код:
@echo off |
Отсутствует, так отсутствует. Спасибо, всё получилось.
|
Цитата:
Код:
@Echo Off |
Цитата:
|
Но мне всё равно непонятно, почему значения echo !Arr[1]! !Arr[2]! !Arr[3]! !Arr[4]! !Arr[5]! !Arr[5]! !Arr[7]! !Arr[8]! !Arr[9]! !Arr[10]! выводятся, а echo !Arr[%%index]! - нет.
Может я неправильно передаю индекс? С этими процентами, восклицательными знаками и пр. - постоянная путаница. :( |
Цитата:
1. Код:
setlocal enableextensions Код:
setlocal enableextensions enabledelayedexpansion Цитата:
Код:
For %%a In (1000 750 600 500 400 300 200 100 50 25) Do (Set /a cnt +=1& Set Arr[!cnt!]=%%a) Код:
for %%i in (1000 750 600 500 400 300 200 100 50 25) do ( Цитата:
Код:
echo %Arr[1]% %Arr[2]% %Arr[3]% %Arr[4]% %Arr[5]% %Arr[5]% %Arr[7]% %Arr[8]% %Arr[9]% %Arr[10]% Цитата:
Первую можно получить по !index! [или call %%index%%] (вот здесь отложенное раскрытие [или двойное обычное раскрытие] уже нужно, потому что её значение ранее задаётся внутри тех же операторных скобок). Вторая доступна по %%i. А что у нас? А у нас так: Код:
echo !Arr[%%index]! Как это можно обойти? Например, так, как в моём коде выше: Код:
if defined sNameFileList!iCount! call ren "%sSourceFolder%\%%~i" "%%~i %%sNameFileList!iCount!%%" Код:
call echo %%Arr[!index!]%% |
Цитата:
Но всё равно, это ведь имеет право на жизнь, особенно если случай с ОС "запущенный" и использование чего-то внешнего проблематично... вот, откопал таки ссылку |
Цитата:
|
Цитата:
Ну, и в скобках отмечу, что: Цитата:
|
Время: 19:50. |
Время: 19:50.
© OSzone.net 2001-