пакетное копирование и перемещение базы на текущий месяц - PullRequest
0 голосов
/ 07 января 2019

В настоящее время у меня есть определенный пакетный файл, который мне нужно запускать каждый месяц. Я хотел бы объединить это в один файл летучей мыши. с условием, если 1 февраля использовать feb-19.

Если текущая дата - январь 2019 года, запустите

copy "C:\TESTone\*.*" "C:\Jan-19"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\Jan-19\"

Если текущая дата - февраль 2019 года, запустите

copy "C:\TESTone\*.*" "C:\Feb-19"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\Feb-19\"

Если текущая дата - март 2019 года, запустите

copy "C:\TESTone\*.*" "C:\Mar-19"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\Mar-19\"

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Вот возможное решение:

@echo off

setlocal EnableDelayedExpansion

set month[01]=Jan
set month[02]=Feb
set month[03]=Mar
set month[04]=Apr
set month[05]=May
set month[06]=Jun
set month[07]=Jul
set month[08]=Aug
set month[09]=Sep
set month[10]=Oct
set month[11]=Nov
set month[12]=Dec

for /f "tokens=2 delims==" %%A in ('wmic OS Get localdatetime /value') do set "dt=%%A"
set "YY=%dt:~2,2%" & set "MM=%dt:~4,2%"

copy "C:\TESTone\*.*" "C:\!month[%MM%]!-%YY%"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\!month[%MM%]!-%YY%\"
pause
  • Включение отложенное расширение поможет здесь, так как оно нам понадобится здесь, ни внутри блока кода, ни при его использовании при установке и использовании переменной в одной строке. Это поможет, поскольку мы хотим отобразить переменную, значением которой является имя другой переменной.
  • Настройка массива месяцев. Мы используем форму varname[monthnum].
  • Нахождение date требует wmic, иначе оно не будет международным. Переменные окружения date и time определяются пользователем и обычно зависят от региональных настроек пользователя.
  • Теперь две последние цифры года сохраняются в переменной YY, а две цифры месяца хранятся в переменной MM.
  • Команда, которую хотел получить OP, была copy "C:\TESTone\*.*" "C:\MMM-YY" и move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\MMM-YY\". Итак, YY просто готово, у нас есть:
copy "C:\TESTone\*.*" "C:\MMM-%YY%"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\MMM-%YY%\"

MMM - значение переменных month[MM]. Итак, используя здесь отложенное расширение; Переменные числа с ! и MM с %. Это будет:

copy "C:\TESTone\*.*" "C:\!month[%MM%]!-YY"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\!month[%MM%]!-YY\"

и затем:

copy "C:\TESTone\*.*" "C:\!month[num]!-YY"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\!_num!-YY\"

и затем обрабатывается, что на самом деле и запрашивается OP.

0 голосов
/ 07 января 2019

Альтернативой wmic в получении независимой даты для локали / пользовательских настроек является powershell,
который может напрямую выводить желаемый формат:

:: Q:\Test\2019\01\07\SO_54070456.cmd
@Echo off
for /f "usebackq" %%A in (`powershell -NoP -C "get-date -f 'MMM-yy'"`) Do set "Month=%%A"
copy "C:\TESTone\*.*" "C:\%Month%"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\%Month%\"

Здесь единственные повторяющиеся результирующие команды:

> Q:\Test\2019\01\07\SO_54070456.cmd
copy "C:\TESTone\*.*" "C:\Jan-19"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\Jan-19\"

PowerShell вернет аббревиатуру месяца MMM с текущей культурой, чтобы выбрать специальное использование культуры с отклонениями:

(Get-Date) .ToString ('MMM-yy', (New-Object System.Globalization.CultureInfo ("en-us")))

Чтобы найти культуру, вы можете использовать функцию .dot Net:

[globalization.cultureinfo] :: GetCultures ( 'allCultures')

0 голосов
/ 07 января 2019

В зависимости от ваших региональных настроек вам может понадобиться немного изменить некоторые параметры на set destFolder=!month:~%d%,3!-%date:~8,2%, это потому, что я вставляю эхо, чтобы сначала показать вам на экране, что происходит. Также пауза в конце. После отладки вы можете убрать паузу:

@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1 delims=/" %%m in ("%date%") do (
   set /A "m=(1%%m%%100-1)*3"
)
set month=JanFebMarAprMayJunJulAugSepOctNovDec
set destFolder=!month:~%d%,3!-%date:~8,2%

set destFolder1=C:\%destFolder%\
echo copy "C:\TESTone\*.*" %destFolder1%
copy "C:\TESTone\*.*" %destFolder1%

set destFolder2=\\172.1.1.1\Shared-File\%destFolder%\
echo move "C:\TESTone\*.*" %destFolder2%
move "C:\TESTone\*.*" %destFolder2%

pause
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...