У меня есть некоторые из лог-файлов, отформатированных как этот "name.log"
копировать и переименовывать файлы в другую папку
Я хотел бы, чтобы скопировать те из одной папки в другую папку, как
xcopy /y "C:\Folder1" "D:\Folder2"
И мне нужно переименовать файл с созданной датой исходного файла (без файла копирования), чтобы текстовый файл в Folder2 был как "name yyyymmddhhmm.log"
, если какой-либо файл имеет то же имя (дата создания), он будет перезаписан.
Код:
set Source=C:\Users\user1\Desktop\Folder1
set Dest=D:\Folder2
if not exist %Dest% md %Dest%
for /F %%a in ('dir /b "%Source%\*.txt"') do call :Sub %%a
goto :eof
:Sub
set "filename=%1"
for /F %%s in ("%Source%\%1") do if %%~zs==0 goto :eof
set "datepart="
FOR /F "tokens=1-5 delims=/-: " %%a IN ('dir /tc "%filename%" ^| findstr "%filename%"') DO (
IF "%%c" neq "" SET "datepart=%%c%%a%%b%%d%%e"
)
FOR /F %%a IN ("%filename%") DO (
set "NewName=%%~na %datepart%%%~xa"
)
xcopy /y "%Source%\%filename%" "%Dest%\%NewName%*"
GOTO :EOF
Проблема заключается в том, что если я не поставил .bat в той же папке, что начальные файлы (Folder1), файлы не меняют имя. Например, если он отсутствует, файлы меняют имя со старым именем и одним пробелом.
Окна команд говорят мне, что он не находит файл, когда он получает дату создания.
Если я помещаю скрипт в папку1, он работает хорошо.
С другой стороны, если я выполняю сценарий с помощью «Планировщика заданий», у меня такая же проблема. Файлы копируются, но без даты создания.
Что мне нужно для решения этой проблемы?
Возможно, это связано с разрешениями. Убедитесь, что папка доступна для записи пользователем. – Phiter
Здравствуйте, я только что тестировал в двух папках на моем рабочем столе, и операция такая же, спасибо – Eduard
Новое имя 'name yyyymmddhhmm.log' (в соответствии с вашим кодом), а не' yyyymmddhhmm.log' (согласно описание), поэтому, пожалуйста, уточните; в любом случае проблема вызвана командой 'dir/tc%% filename%" ', которая должна быть изменена на' dir/tc '% Source% \% filename% "'; кроме того, командную строку 'findstr' следует изменить на' findstr/L/E/C: "% filename%" 'до (по крайней мере почти) совпадения со всем именем файла; наконец, часть 'FOR/F %% a' должна быть изменена на' FOR "eol = | delims =" %% a' ... – aschipfl