CMD/BAT - Группировка файлов

Ответить
Аватара пользователя
r1sh

CMD/BAT - Группировка файлов

Сообщение r1sh »

Всем привет!



Есть структура папок:



archive

|

+2014-Apr-01

|

+2014-Apr-02

|

+2014-Apr-03





Нужно все файлы в папках переместить в каталог соответcтвующий формату 2014-Apr



Я написал скрипт:





Код:

Код: Выделить всё

chcp 1251
setlocal enabledelayedexpansion
set input=d:\arch
set output=d:\test
set h="string"
mkdir %output%\2014
mkdir %output%\2014\2014-Jan
mkdir %output%\2014\2014-Feb
mkdir %output%\2014\2014-Mar
mkdir %output%\2014\2014-Apr
mkdir %output%\2014\2014-May
mkdir %output%\2014\2014-Jun
mkdir %output%\2014\2014-Jul
mkdir %output%\2014\2014-Aug
mkdir %output%\2014\2014-Sep
mkdir %output%\2014\2014-Oct
mkdir %output%\2014\2014-Nov
mkdir %output%\2014\2014-Dec
for /f %%i in ('dir /b %input%\') do (
for /f %%j in ('dir /b %input%\%%i\"#msgs"\') do (
ren %%j %%i_%%j
)
set h=%%i
move %input%\%%i\#msgs\* %output%\2014\%h:~0,8%\
)

проблема в том, что значение переменной h после set h=%%i все равно остается "string"



Подскажите пожалуйста с чем связана проблема?
Аватара пользователя
Georgio

Re: CMD/BAT - Группировка файлов

Сообщение Georgio »

Код:

Код: Выделить всё

move %input%\%%i\#msgs\* %output%\2014\!h:~0,8!\
Аватара пользователя
r1sh

Re: CMD/BAT - Группировка файлов

Сообщение r1sh »

спасибо заработало!!! блин а почему??? о_О
Аватара пользователя
r1sh

Re: CMD/BAT - Группировка файлов

Сообщение r1sh »

Цитата r1sh:



а почему???
CMD/BAT - Группировка файлов






Потому что переменные, задаваемые внутри цикла, должны расширяться не с помощью символов процента, а с помощью восклицательных знаков при обязательном включении отложенного расширения переменных ("setlocal enabledelayedexpansion"), что у Вас, кстати, в коде есть.
Аватара пользователя
r1sh

Re: CMD/BAT - Группировка файлов

Сообщение r1sh »

Цитата Georgio:



Потому что переменные, задаваемые внутри цикла, должны расширяться не с помощью символов процента, а с помощью восклицательных знаков при обязательном включении отложенного расширения переменных ("setlocal enabledelayedexpansion"), что у Вас, кстати, в коде есть.
CMD/BAT - Группировка файлов




а без "setlocal enabledelayedexpansion" они не будут вообще расширяться?
Аватара пользователя
Iska

Re: CMD/BAT - Группировка файлов

Сообщение Iska »

Цитата r1sh:



а без "setlocal enabledelayedexpansion" они не будут вообще расширяться?
CMD/BAT - Группировка файлов




Будут. Но только обычным образом — сразу, не «отложенно». Результат Вы видели в первом сообщении.



Иногда можно обойтись без отложенного расширения, используя технику опосредованного раскрытия переменных по «call»:



Код:

Код: Выделить всё

@echo off
setlocal enableextensions disabledelayedexpansion
set sVar1=Some Value 1
(
	set sVar2=Some Value 2
	echo [%sVar1%]
	echo [%sVar2%]
	call echo [%%sVar2%%]
)
endlocal
exit /b 0
Ответить

Вернуться в «Скриптовые языки администрирования Windows»