Показать полную графическую версию : [решено] Проверка соответствия имени файла
Нужно сделать так: если имя переданного файла (%1) содержит только символы латинского алфавита (A-Z,a-z), подчёркивания (_) и тире (-), а также не больше 60 символов, то надо только записать в какую-нибудь переменную исходное имя файла (для дальнейшего использования), а если это условие не выполнится, то файл надо скопировать во временную папку (это я сам знаю, как делается), затем его переименовать по шаблону file_YEAR-MONTH-DAY_HOUR-MINUTE-SECOND.ext, где YEAR, MONTH, DAY, HOUR, MINUTE, SECOND - текущие год, месяц, день, час, минута и секунда, ext - изначальное расширение файла, и записать в переменную уже новое имя файла. Помогите, пожалуйста :)
@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
Еще вариант:
@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
спасибо :) попробую оба варианта
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.