PDA

Показать полную графическую версию : Группировка файлов


r1sh
09-02-2015, 15:44
Всем привет!

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

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
09-02-2015, 15:59
move %input%\%%i\#msgs\* %output%\2014\!h:~0,8!\

r1sh
09-02-2015, 16:50
спасибо заработало!!! блин а почему??? о_О

Georgio
09-02-2015, 17:01
а почему??? »


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

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

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

Iska
09-02-2015, 17:58
а без "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




© OSzone.net 2001-2012