Показать полную графическую версию : [решено] Как создать папку имя которой будет дата создания файла ?
Vitaly_Sigov
07-07-2010, 10:13
Здравствуйте, уважаемые форумчане.
Подскажите, пожалуйста, как создать папку имя которой будет дата создания файла посредством bat-файла?
Т.е. есть папка - в ней файлы с разными датами создания.
Хотелось бы, чтобы рядом с этими файлами создались папки - имена которых будут даты создания файлов.
@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
Спасибо большое, получилось!
WindBlow
10-09-2010, 13:10
Vitaly_Sigov, подскажите,
необходимо в созданные таким образом папки переместить файлы из-за которых они были созданы
т.е. если файл был создан 10.01.01 была создана папка 10.01.2001 и в эту папку нужно переместить все файлы созданные 10.01.01
как в этом случае будет выглядить код?
была создана папка 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
gora,
благодарю! то что нужно!
Может быть не много не в тему, но может кто подскажет..
Необходимо сравнить даты уже существующих файлов (D:\Backup\*.rar) с текущей датой.
Я так понимаю это нужно сделать с применением цикла FOR, но я только начал разбираться в bat и не могу допереть..
Взял из другой темы! Это поиск по маске, но тут еще сортировка /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
Конкретнее - как ввести %date% чтобы получить "09811", т.е. ddmee предыдущего дня »
А если октябрь-декабрь? 10-12?
вопрос вроде пустяковый »
Портянка на полстраницы, чтоб узнать вчерашнюю дату:
@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%
Foreigner, спасибо.
Можешь пояснить нек-е нюансы, дабы во всем разобраться во всем.
1. Строка set /a feb=y%%4 Я так понимаю, это високосный год или нет, но что конкретно делает y%%4
2. Я не знаю что значит операция присвоения -=
Вообще там должны быть в 10-12месяцах, не цифры а какие-то др. символы (еще не знаю), например x y z. Но это фиг с ним. Потом сам.
Foreigner
11-08-2011, 10:38
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%
отредактировал предыдущую просьбу (http://forum.oszone.net/post-1729646-10.html)
Foreigner
11-08-2011, 12:17
1. Строка set /a feb=y%%4 Я так понимаю, это високосный год или нет, но что конкретно делает y%%4 »
Это арифметическая операция, получающая остаток от деления set /a var=6%4, в батниках знак процента удваивается
2. Я не знаю что значит операция присвоения -= »
Это сокращенный вариант от set /a var=var-2 (т.е. set /a var-=2 тоже самое)
set /?
Похожий вопрос:
есть туча папок с файлами внутри. Нужно пройтись по всем папкам, взять год последнего изменения каждого файла и переместить файлы по пути год изменения\имя исходной папки, в которой найден файл\файл
Долго ваял и наваял вот такое
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 )
Оно не работает.
Что не так, подскажите? А то мозги уже несколько кипят.
Всем спасибо :)
Разобрался сам:
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 )
Думаю, кому-нибудь пригодится.
@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
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"
))
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.