Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
igorbond
0 / 0 / 0
Регистрация: 28.04.2015
Сообщений: 4
1

Создать bat который выводит номер месяца начиная с текущего и заканчивая концом года

28.04.2015, 09:55. Просмотров 1075. Ответов 13
Метки нет (Все метки)

Здравствуйте, помогите решить задачу...
Нужно написать батник, который создает файлы(можно папки не важно) с номером месяца, начиная с текущего и заканчивая концом года, т.е. двенадцатым месяцем.
Вот что у меня получилось, но проблемы с 8 и 9 месяцем...
Вот мой код:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
echo date=%date:~3,-5%
set n=%date:~3,-5%
set x=12
 
rem "создаем цикл от n до 12"
for /l %%i in (%n%,1,%x%) do (
set  newdate=%n%+1
md D:\%%i
)
rem "условие для 12 месяца"
:M0
set DEC=%x%
IF %n% EQL %x% GOTO stop
GOTO M0
:stop
exit
 
pause
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2015, 09:55
Ответы с готовыми решениями:

Написать скрипт, который запрашивает номер месяца и выводит название времени года
Недавно для себя начал изучать Ява-Скрипт, помогите с таким заданием: Нужно написать Java-скрипт,...

Напишите скрипт,который запрашивает номер месяца и выводит название времена года
1)Создать выпадающие меню с помощью Select. 2)Создать форму для регистрации, используя поля Ф.И.О,...

Написать программу, которая запрашивает у пользователя номер месяца и выводит соответствующее название времени года
Написать программу, которая запрашивает у пользователя номер месяца и выводит соответствующее...

Написать программу, которая запрашивает у пользователя номер месяца и выводит соответствующее название времени года
Написать программу, которая запрашивает у пользователя номер месяца и выводит соответствующее...

Напишите программу, которая получает день и номер месяца, а выводит количество дней, оставшихся до Нового Года
Помогите пожалуйста,надо написать программу с объяснением. Напишите программу, которая получает...

13
sov44
1763 / 747 / 128
Регистрация: 09.04.2011
Сообщений: 1,324
28.04.2015, 10:04 2
Windows Batch file
1
2
3
4
5
@echo off
SetLocal enabledelayedexpansion
 
set /a m=%date:~3,2%
for /l %%a in (%m%,1,12) do md %%a
1
igorbond
0 / 0 / 0
Регистрация: 28.04.2015
Сообщений: 4
28.04.2015, 10:29  [ТС] 3
август и сентябрь всеравно не работают, пишет:
"Неправильное число. Число константы должно быть десятичным (17),
шестнадцатеричным (0х11) или восьмеричным (021)".
И ничего не происходит
0
ComSpec
3416 / 1959 / 629
Регистрация: 26.02.2014
Сообщений: 1,457
28.04.2015, 11:17 4
Лучший ответ Сообщение было отмечено igorbond как решение

Решение

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
 
for /f "tokens=2 delims=." %%i in ("%date%") do (
 for /f "tokens=* delims=0" %%j in ("%%i") do (
  for /l %%k in (%%j 1 12) do (
   md %%k
  )
 )
)
 
exit/b 0
2
28.04.2015, 11:17
igorbond
0 / 0 / 0
Регистрация: 28.04.2015
Сообщений: 4
28.04.2015, 11:21  [ТС] 5
Цитата Сообщение от ComSpec Посмотреть сообщение
@echo off
for /f "tokens=2 delims=." %%i in ("%date%") do (
*for /f "tokens=* delims=0" %%j in ("%%i") do (
* for /l %%k in (%%j 1 12) do (
* *md %%k
* )
*)
)
exit/b 0
Спасибо большое, все работает))
0
sov44
1763 / 747 / 128
Регистрация: 09.04.2011
Сообщений: 1,324
28.04.2015, 11:48 6
Цитата Сообщение от igorbond Посмотреть сообщение
август и сентябрь всеравно не работают
Странно, я проверял, всё работало.
ComSpec, не понял, в чём фишка вашего кода?
0
buggydancer
250 / 238 / 16
Регистрация: 31.12.2009
Сообщений: 324
28.04.2015, 13:12 7
Цитата Сообщение от sov44 Посмотреть сообщение
... всё работало.
может у ТС Windows новее - новые возможности по работе с системами счислений
Цитата Сообщение от sov44 Посмотреть сообщение
... в чём фишка ...
в восьмиричном коде цифр 08 - август и 09 - сентябрь быть не должно?
1
ComSpec
3416 / 1959 / 629
Регистрация: 26.02.2014
Сообщений: 1,457
28.04.2015, 13:13 8
Цитата Сообщение от sov44 Посмотреть сообщение
Странно, я проверял, всё работало

sov44, у меня тоже работает (возможно, у нас и у ТС разные версии интерпретатора), но это будет работать только до определённого времени. Если бы сейчас был август или сентябрь, то у нас с Вами создались бы папки с именами от "0" до "12", поскольку "08" и "09" были бы интерпретированы как набор символов, не являющийся числом, который был бы приравнен к нулю.

Например, в командной строке вывод команды
Windows Batch file
1
for /l %i in (08 1 12) do @echo %i
будет одинаков с выводом команды
Windows Batch file
1
for /l %i in (абракадабра 1 12) do @echo %i
:
0
1
2
3
4
5
6
7
8
9
10
11
12
.



Цитата Сообщение от sov44 Посмотреть сообщение
не понял, в чём фишка вашего кода?

А вот фишка как раз и заключается в очистке значения номера месяца от стартового нуля (нулей), если таковой (таковые) имеются (аналогия, например, с методом "TrimStart" в PowerShell):
Цитата Сообщение от ComSpec Посмотреть сообщение
Windows Batch file
4
 for /f "tokens=* delims=0" %%j in ("%%i") do (
.
Кстати, можно и статью о циклических операциях этим дополнить.
2
sov44
1763 / 747 / 128
Регистрация: 09.04.2011
Сообщений: 1,324
28.04.2015, 14:39 9
Цитата Сообщение от ComSpec Посмотреть сообщение
возможно, у нас и у ТС разные версии интерпретатора
Полагал, что set /a на всех интерпретаторах отрезает первый нуль. Спасибо за разъяснение.
0
ComSpec
3416 / 1959 / 629
Регистрация: 26.02.2014
Сообщений: 1,457
28.04.2015, 18:40 10
Цитата Сообщение от sov44 Посмотреть сообщение
Полагал, что set /a на всех интерпретаторах отрезает первый нуль.



Да, действительно это так, и отрезается не только первый нуль, но отрезаются и все начальные нули, но только в том случае, если после этих нулей не идут цифры "8" или "9". Наличие этих цифр после нулей приводит к ошибке, описанной ТС.



Загадкой остаётся то, каким образом ТС попадал в "будущее" или в "прошлое". Может быть он делал так:


Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
 
set date=28.08.2015
 
:: В данном случае значение переменной "m"
:: присвоено не будет из-за ошибки:
set/a m=%date:~3,2%
 
:: Из-за отсутствия значения у переменной "m"
:: эта команда не сработает вовсе:
for /l %%i in (%m% 1 12) do md %%i
 
pause>nul

?
2
sov44
1763 / 747 / 128
Регистрация: 09.04.2011
Сообщений: 1,324
28.04.2015, 19:16 11
тогда так
Windows Batch file
1
set/a m=1%date:~3,2%-100
2
Smitis
1630 / 339 / 41
Регистрация: 15.10.2012
Сообщений: 531
29.04.2015, 00:16 12
sov44, опередил
0
igorbond
0 / 0 / 0
Регистрация: 28.04.2015
Сообщений: 4
29.04.2015, 08:01  [ТС] 13
Цитата Сообщение от ComSpec Посмотреть сообщение
Да, действительно это так, и отрезается не только первый нуль, но отрезаются и все начальные нули, но только в том случае, если после этих нулей не идут цифры "8" или "9". Наличие этих цифр после нулей приводит к ошибке, описанной ТС.



Загадкой остаётся то, каким образом ТС попадал в "будущее" или в "прошлое". Может быть он делал так:


Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
 
set date=28.08.2015
 
:: В данном случае значение переменной "m"
:: присвоено не будет из-за ошибки:
set/a m=%date:~3,2%
 
:: Из-за отсутствия значения у переменной "m"
:: эта команда не сработает вовсе:
for /l %%i in (%m% 1 12) do md %%i
 
pause>nul

?
Цитата Сообщение от ComSpec Посмотреть сообщение
Загадкой остаётся то, каким образом ТС попадал в "будущее" или в "прошлое". Может быть он делал так:
Суть задания была в том чтобы создавались папки равные текущему месяцу, а месяц нужно было изменять вручную(просто менять текущий месяц, не в коде, а на ПК)
0
ComSpec
3416 / 1959 / 629
Регистрация: 26.02.2014
Сообщений: 1,457
29.04.2015, 08:29 14
Цитата Сообщение от igorbond Посмотреть сообщение
а месяц нужно было изменять вручную


Изменять месяц в системной дате на ПК и возвращать его обратно можно и с помощью кода (правда, запускать пакетный файл с таким кодом надо от имени администратора):


Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
 
set new_month=08
 
set real_date=%date%
for /f "tokens=1,3 delims=." %%i in ("%date%") do (
 date %%i.%new_month%.%%j
)
 
cd/d "%~dp0"
 
for /f "tokens=2 delims=." %%i in ("%date%") do (
 for /f "tokens=* delims=0" %%j in ("%%i") do (
  for /l %%k in (%%j 1 12) do (
   md %%k
  )
 )
)
 
date %real_date%
 
exit/b 0

.
1
29.04.2015, 08:29
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2015, 08:29

Напишите программу, которая запрашивает у пользователя номер месяца и затем выводит соответствующее название времени года
Напишите программу, которая запрашивает у пользователя номер месяца и затем выводит соответствующее...

Заданы число и месяц невисокосного года. Вычислить порядковый номер даты, начиная отсчет с начала года
Заданы два натуральных числа a,b которые обозначают число и месяц не високосного года. Вычислить...

Получение первого и последнего дня текущего месяца и года
Всем привет. Требуется написать метод, который будет возвращать дату в формате yyyy-MM-dd....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.