Пакетный скрипт для копирования и переименования файлов из одного места в другое - PullRequest
0 голосов
/ 18 сентября 2018

Мне нужен пакетный скрипт для копирования всего одного файла, повторяющегося каждые 1 час, этот файл имеет имя file_name_YYYY_MM_DD_hh_mm.csv.Файл существует в Loc1Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n1 и должен быть скопирован в Loc2Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n2, а затем переименован в file_name.csv (удаление метки времени).Мне нужно, чтобы этот файл перезаписывался каждый раз, когда файл копируется в Loc2Dir.

. В настоящее время я использую этот скрипт:

@ECHO ON

SET Loc1Dir=C:\Users\fgutierrez\Downloads
SET Loc2Dir=C:\Users\fgutierrez\Desktop\CrossCheck

CD /D "%Loc1Dir%" 
FOR /R %%F IN ("*_*.csv") DO CALL :copyFile %%~F %%~NXF
GOTO: EOF 

:copyFile
SET copyfname=%~1
SET fname=%~2 
SET fname=%fname:_=-%
ECHO F | XCOPY /Y /F "%copyfname%" "%Loc2Dir%\%fname%"
:::XCOPY /Y /F "%copyfname%" "%Loc2Dir%\"
:::REN "%copyfname%" "%fname%"
GOTO :EOF

Он работает нормально, но он просто заменяет _ в file_name_YYYY_MM_DD_hh_mm.csv для - будет file-name-YYYY-MM-DD-hh-mm.csv

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Если вы просто хотите скопировать самое последнее воплощение file_name _ *. Csv и убрать метку даты, вам понадобятся два for /f, 1-й для получения самой новой даты и 2-й для стрипа.

Выбор file_name в качестве заполнителя может быть неразумным. Предполагая, что ваше настоящее имя также имеет подчеркивание между:

:: Q:\Test\2018\09\18\SO_52378446.cmd
@ECHO ON
SET "Loc1Dir=C:\Users\fgutierrez\Downloads"
SET "Loc2Dir=C:\Users\fgutierrez\Desktop\CrossCheck"

SET "FileName=file_name_*_*_*_*_*.csv"
SET "fname="

CD /D "%Loc1Dir%" 
FOR /F "delims=" %%F IN ('Dir /B/O:N "%FileName%"') DO Set "fname=%%~nxF"
If defined fname For /f "tokens=1-2 delims=_" %%F in ("%fname%"
    ) DO Echo F|XCOPY /Y /F "%fname%" "%Loc2Dir%\%%F_%%G.csv"

For /f "tokens=1-2 delims=_" %%F in ("%fname%" разделяет найденное имя файла по подчеркиванию и использует только первые два токена для имени файла назначения.

0 голосов
/ 18 сентября 2018

Это будет работать:

@ECHO ON
SET Loc1Dir=C:\Users\fgutierrez\Downloads
SET Loc2Dir=C:\Users\fgutierrez\Desktop\CrossCheck
copy %Loc1Dir%\file_name*.csv %Loc2Dir%\file_name.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...