我有一个重命名文件的任务,并将另一个同名文件放在同一文件夹中
例如一个文件夹C:/test
我有多个文件.txt
(假设test.txt
是一个需要重命名和替换的文件)
我想将test.txt
重命名为test_bkp%date%
并在此处放置新文件。
需要帮助来开始逻辑。
@ECHO OFF
SET "sourcedir=C:\Users\test\new"
FOR /f "delims=" %%a IN (
'dir /b /a-d "%C:\Users\Test\new\%filenames%.txt" '
) DO (
SET "filename=%%a"
ECHO REN "%C:\Users\Test\new\%%a C:\Users\Test\new\%%a_bk_date.*%"
)
GOTO :EOF
让我解释一下我要达到的目标。我经常收到包含更新数据的文件。我不能继续将旧文件替换为新文件。我必须备份并将新文件放在文件夹中。 这是我第一次尝试使用批处理脚本
答案 0 :(得分:1)
一旦将新版本的文件写入与原始文件(具有相同名称)的相同文件夹中,重新命名原始文件已为时已晚-它不再存在。您需要两个文件夹:一个用于接收新版本(new
),另一个用于保存重命名文件和新文件夹(old
)
@ECHO OFF
setlocal
set "source=C:\Users\test\new"
set "destin=C:\Users\test\old"
set "files=*.txt"
REM for every matching file in the source folder:
for %%A in ("%source%\%files%") do (
REM if there is such a file in the destination folder, rename it:
if exist "%destin%\%%~nxA" ren "%destin%\%%~nxA" "%%~nA-%date%%%~xA"
REM only then copy the file:
copy "%%~fA" "%destin%\"
)
如果每天运行多次,此操作将失败。 (需要更多代码来处理;例如,也添加time
)
如果您的%date%
包含文件名中不允许的字符(我的%date%
看起来像29.01.2019
),也会失败。 (处理该问题需要更多代码;例如%date:/=-%
)