Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 自动化文件替换_Batch File_Cmd_Batch Rename - Fatal编程技术网

Batch file 自动化文件替换

Batch file 自动化文件替换,batch-file,cmd,batch-rename,Batch File,Cmd,Batch Rename,我的任务是重命名一个文件,并将另一个同名文件放在同一文件夹中 例如,一个文件夹C:/test我有多个文件.txt(假设test.txt是需要重命名和替换的文件) 我想将test.txt重命名为test\u bkp%date%并将新文件放在那里。 需要帮助来启动逻辑 @ECHO OFF SET "sourcedir=C:\Users\test\new" FOR /f "delims=" %%a IN ( 'dir /b /a-d "%C:\Users\Test\new\%filenames%.

我的任务是重命名一个文件,并将另一个同名文件放在同一文件夹中

例如,一个文件夹
C:/test
我有多个文件
.txt
(假设
test.txt
是需要重命名和替换的文件)
我想将
test.txt
重命名为
test\u 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
让我解释一下我想要实现的目标。我经常收到更新数据的文件。我不能继续用新文件替换旧文件。我必须备份并将新文件放入文件夹中。
这是我第一次尝试使用批处理脚本编写

一旦您将文件的新版本写入与原始文件(名称相同)相同的文件夹,重命名原始文件已经太晚了-它不再存在。您需要两个文件夹:一个用于接收新版本(
new
),另一个用于保存重命名文件和新文件(
old

如果每天运行一次以上,则此操作将失败。(需要更多的代码来处理这个问题;例如,也要添加
time


如果您的
%date%
包含文件名中不允许的字符(我的
%date%
看起来像
29.01.2019
),它也会失败。(需要更多代码来处理该问题;例如
%date:/=-%

使用
进行循环,查看
的循环帮助(命令行和/或web)?类似于(*.txt)中%%G的
重命名%%G test\u bk%date%
我尝试过,但这应该是自动的。其他人将文件放在不同的位置,我将其移动到当前位置,必须重命名现有文件并放置新文件(类似于使用新的/附加数据更新文件)请编辑问题并粘贴到您试图使用的代码中。告诉它正在做什么和应该做什么。
%filenames%
的内容是什么
Ren
目标仅为filename.ext(无路径)。您的
ren
命令只有一个参数(请注意您的引用)。谢谢。。我可能有点跛脚。我对这方面还不熟悉,想试一试。上面的一个是我通过谷歌搜索尝试的。。。在x系统上,我们用一些配置数据重新保存文件。因此,我们不断得到更新,并要求替换这些文件。假设我们有1.txt,2.txt,3.txt。并收到更新的文件1.txt。我正在尝试自动化查找名为1.txt的文件的过程,并复制该文件,然后用新文件替换。谢谢stephan..以下是我的计划。。将文件移动到其他文件夹-->将文件名提取到txt文件-->用于在文件夹中标识该文件,并通过添加日期格式-->将其移动到备份文件夹,然后将传入文件移动到该文件夹。需要找出for/r,以便在txt中查找文件名
@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%\"
)