Группировка файлов
Всем привет!
Есть структура папок:
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"
Подскажите пожалуйста с чем связана проблема?
|
Код:
move %input%\%%i\#msgs\* %output%\2014\!h:~0,8!\
|
спасибо заработало!!! блин а почему??? о_О
|
Потому что переменные, задаваемые внутри цикла, должны расширяться не с помощью символов процента, а с помощью восклицательных знаков при обязательном включении отложенного расширения переменных ("setlocal enabledelayedexpansion"), что у Вас, кстати, в коде есть.
|
Цитата:
Цитата Georgio
Потому что переменные, задаваемые внутри цикла, должны расширяться не с помощью символов процента, а с помощью восклицательных знаков при обязательном включении отложенного расширения переменных ("setlocal enabledelayedexpansion"), что у Вас, кстати, в коде есть. »
|
а без "setlocal enabledelayedexpansion" они не будут вообще расширяться?
|
Цитата:
Цитата r1sh
а без "setlocal enabledelayedexpansion" они не будут вообще расширяться? »
|
Будут. Но только обычным образом — сразу, не «отложенно». Результат Вы видели в первом сообщении.
Иногда можно обойтись без отложенного расширения, используя технику опосредованного раскрытия переменных по «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
|
Время: 09:44.
© OSzone.net 2001-