Компьютерный форум 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=212483)

rsod 02-08-2011 23:26 1724840

Проверка соответствия имени файла
 
Нужно сделать так: если имя переданного файла (%1) содержит только символы латинского алфавита (A-Z,a-z), подчёркивания (_) и тире (-), а также не больше 60 символов, то надо только записать в какую-нибудь переменную исходное имя файла (для дальнейшего использования), а если это условие не выполнится, то файл надо скопировать во временную папку (это я сам знаю, как делается), затем его переименовать по шаблону file_YEAR-MONTH-DAY_HOUR-MINUTE-SECOND.ext, где YEAR, MONTH, DAY, HOUR, MINUTE, SECOND - текущие год, месяц, день, час, минута и секунда, ext - изначальное расширение файла, и записать в переменную уже новое имя файла. Помогите, пожалуйста :)

amel27 03-08-2011 11:42 1725084

Код:

@echo off
set DIR=c:\TEMP

set "$F="& set "$1=%~n1"
SetLocal EnableDelayedExpansion
echo:!$1!|findstr/xrc:"[A-Za-z_-]*"|findstr/vrc:".............................................................">Nul&& set "$F=+"
EndLocal& set "$F=%$F%"

if defined $F (
  set "VAR=%~n1"
  call echo VAR=%%VAR%%
) else (
  copy "%~1" "%DIR%\"
  ren "%DIR%\%~nx1" "%~n1_%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%%~x1"
)

P.S. для стандартной локали: DD.MM.YYYY HH:MM:SS

SendMessage 03-08-2011 15:05 1725233

Еще вариант:
Код:

@echo off

setlocal enabledelayedexpansion

set "fn=%~n1"
set "tempdir=z:\tmp\"

if "%fn:~60,1%"=="" (echo=%fn%|findstr "[^A-Za-z_-]">nul||set "name=%~1")
if not defined name (
  for /f "skip=1 tokens=1 delims=." %%d in ('wmic os get localdatetime') do set "dt=%%d"
  set "name=%fn%_!dt:~0,4!-!dt:~4,2!-!dt:~6,2!_!dt:~8,2!-!dt:~10,2!-!dt:~12,2!%~x1"
  copy "%~1" "%tempdir%"
  ren "%tempdir%%~nx1" "%name%"
)
echo %name%
pause>nul


rsod 03-08-2011 18:52 1725442

спасибо :) попробую оба варианта


Время: 16:23.

Время: 16:23.
© OSzone.net 2001-