Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как создать папку имя которой будет дата создания файла ? (http://forum.oszone.net/showthread.php?t=180029)

Vitaly_Sigov 07-07-2010 10:13 1448807

Как создать папку имя которой будет дата создания файла ?
 
Здравствуйте, уважаемые форумчане.
Подскажите, пожалуйста, как создать папку имя которой будет дата создания файла посредством bat-файла?

Т.е. есть папка - в ней файлы с разными датами создания.
Хотелось бы, чтобы рядом с этими файлами создались папки - имена которых будут даты создания файлов.

deepred 07-07-2010 10:50 1448828

Код:

@Echo OFF&Chcp 866

Set $SCR="F:\vbs_bat_js_ps\batch\D-make folder\*.*"
for %%a in (%$SCR%) do (for /f "tokens=1" %%b in ("%%~ta") do MD "%%~dpa%%~b")
pause

$SCR- твоя папка
Справка: Set /?, For /?, MD /?
Похожая тема: http://forum.oszone.net/post-1443909-6.html

Это единственное действие или предполагаются еще какие-нибудь манипуляции?

Vitaly_Sigov 08-07-2010 10:15 1449494

Спасибо большое, получилось!

WindBlow 10-09-2010 13:10 1492445

Vitaly_Sigov, подскажите,
необходимо в созданные таким образом папки переместить файлы из-за которых они были созданы
т.е. если файл был создан 10.01.01 была создана папка 10.01.2001 и в эту папку нужно переместить все файлы созданные 10.01.01
как в этом случае будет выглядить код?

gora 10-09-2010 13:54 1492479

Цитата:

Цитата WindBlow
была создана папка 10.01.2001 и в эту папку нужно переместить все файлы созданные 10.01.01 »

Код:

@Echo OFF&Chcp 866>Nul

Set $SCR="F:\vbs_bat_js_ps\batch\D-make folder\*.*"
for %%a in (%$SCR%) do (for /f "tokens=1" %%b in ("%%~ta") do MD "%%~dpa%%~b" 2>Nul&Move "%%a" "%%~dpa%%~b")
pause


WindBlow 10-09-2010 14:09 1492486

gora,
благодарю! то что нужно!

XuTPbIu 03-03-2011 17:24 1626478

Может быть не много не в тему, но может кто подскажет..
Необходимо сравнить даты уже существующих файлов (D:\Backup\*.rar) с текущей датой.
Я так понимаю это нужно сделать с применением цикла FOR, но я только начал разбираться в bat и не могу допереть..

Arttem 10-08-2011 16:48 1729242

Взял из другой темы! Это поиск по маске, но тут еще сортировка /a -по атрибутам /o -по дате
Код:

for /f "tokens=*" %%i in ('dir /b /o:-d /a:d "c:\1\321*.*"') do set sName=%%i 
if defined sName echo %sName%

У меня еще такой вопрос, не по теме почти но все же:

Как полльзоваться сокращением ~ переменной?
Конкретнее - как ввести %date% чтобы получить "09811", т.е. ddmee предыдущего дня
(не вижу смысла создавать новую тему -вопрос вроде пустяковый- но очень надо.)
Заранее спасибо!

Foreigner 10-08-2011 18:44 1729297

Цитата:

Цитата Arttem
Конкретнее - как ввести %date% чтобы получить "09811", т.е. ddmee предыдущего дня »

А если октябрь-декабрь? 10-12?
Цитата:

Цитата Arttem
вопрос вроде пустяковый »

Портянка на полстраницы, чтоб узнать вчерашнюю дату:
Код:

@echo off
setlocal enabledelayedexpansion

set d=%date:~0,2%
set m=%date:~3,2%
set y=%date:~6,4%

if %d:~0,1%==0 set d=%d:~1%
if %m:~0,1%==0 set m=%m:~1%

set /a feb=y%%4
if %feb%==0 (set feb=29) else (set feb=28)

set /a tok=m-1
if %tok%==0 set tok=12
for /f "tokens=%tok%" %%i in ("31 %feb% 31 30 31 30 31 31 30 31 30 31") do (
    set /a d-=1
    if !d!==0 (
        set d=%%i
        set m=%tok%
        if !m!==12 set /a y-=1
    )
)

set d=0%d%
set m=0%m%
set yesterday=%d:~-2%.%m:~-2%.%y%

echo %yesterday%


Arttem 11-08-2011 10:10 1729646

Foreigner, спасибо.
Можешь пояснить нек-е нюансы, дабы во всем разобраться во всем.

1. Строка set /a feb=y%%4 Я так понимаю, это високосный год или нет, но что конкретно делает y%%4
2. Я не знаю что значит операция присвоения -=

Вообще там должны быть в 10-12месяцах, не цифры а какие-то др. символы (еще не знаю), например x y z. Но это фиг с ним. Потом сам.

Foreigner 11-08-2011 10:38 1729663

Arttem,
А чем не устраивает 01...12? Можно и буквами:
Код:

....
    )
)


set d=0%d%
for /f "tokens=%m%" %%i in ("a b c d e f g h i k l m") do set "m=%%i"
set yesterday=%d:~-2%%m%%y:~-2%

echo %yesterday%


Arttem 11-08-2011 11:55 1729721

отредактировал предыдущую просьбу

Foreigner 11-08-2011 12:17 1729742

Цитата:

Цитата Arttem
1. Строка set /a feb=y%%4 Я так понимаю, это високосный год или нет, но что конкретно делает y%%4 »

Это арифметическая операция, получающая остаток от деления set /a var=6%4, в батниках знак процента удваивается
Цитата:

Цитата Arttem
2. Я не знаю что значит операция присвоения -= »

Это сокращенный вариант от set /a var=var-2 (т.е. set /a var-=2 тоже самое)
Код:

set /?

ffs2001 10-03-2012 19:21 1876337

Похожий вопрос:

есть туча папок с файлами внутри. Нужно пройтись по всем папкам, взять год последнего изменения каждого файла и переместить файлы по пути год изменения\имя исходной папки, в которой найден файл\файл

Долго ваял и наваял вот такое

Код:

FOR /R "D:\_exp" %%G in (.) DO (
        Pushd %%G
        set dirname=%%G
            for %%a in (dir *.* /b) do (
            for /f "skip=5 tokens=1" %%w in ('dir *.* /t:w') do (
                  set year=%%w& set newdirname=%year:~6,4%& move /y %%a D:\_exp\%newdirname%\%dirname%\ )
                )
Popd )

Оно не работает.
Что не так, подскажите? А то мозги уже несколько кипят.

ffs2001 10-03-2012 23:37 1876496

Всем спасибо :)
Разобрался сам:

Код:

FOR /D /R "D:\_exp\" %%G in (.) DO (
        Pushd %%G
                for %%a in (*.*) do (for /f "tokens=3 delims=.: " %%b in ("%%~ta") do MD "D:\_exp\%%b\%%~nxG"& copy "%%a" "D:\_exp\%%b\%%~nxG")
        Popd )

Думаю, кому-нибудь пригодится.

seriych 15-05-2012 02:13 1916082

Цитата:

Цитата gora
@Echo OFF&Chcp 866>Nul
Set $SCR="F:\vbs_bat_js_ps\batch\D-make folder\*.*"
for %%a in (%$SCR%) do (for /f "tokens=1" %%b in ("%%~ta") do MD "%%~dpa%%~b" 2>Nul&Move "%%a" "%%~dpa%%~b")
pause »

А как модифицировать, чтобы названия папок были не 15.05.2012, а 2012.05.15?

Foreigner 15-05-2012 07:13 1916103

seriych,
Код:

for %%a in (%$SCR%) do (

    for /f "tokens=1-3 delims=. " %%b in ("%%~ta") do (
       
        2>nul md "%%~dpa%%d.%%c.%%b"
        move "%%a" "%%~dpa%%d.%%c.%%b"

))



Время: 19:15.

Время: 19:15.
© OSzone.net 2001-