用新文件替换旧文件

时间:2017-01-25 11:19:59

标签: file batch-file cmd

我正在尝试编写一个脚本,将旧文件内容替换为以下列格式显示的新文件内容:

旧文件:something.txt
新文件:something.txt.new

旧文件需要替换为新文件内容
新文件名无需重新命名即可重命名 旧文件需要删除

下面的脚本不起作用:请你改写一下:

@echo off
setlocal enabledelayedexpansion
set FOLDER_PATH=D:\test
for %%f in (%FOLDER_PATH%*) do if %%f neq %~nx0 (
    set basename=test
    ren *.txt.new !basename!.txt
)
PAUSE

我在文件夹中有很多文件,需要遍历每个文件,只需要我需要的是basename变量需要在每次迭代中填充旧文件名的名称

3 个答案:

答案 0 :(得分:0)

@echo off
setlocal
set FOLDER_PATH=D:\test
for %%f in (%FOLDER_PATH%\*.new) do if "%%~ff" neq "%~f0" (
    ECHO move /Y "%%~ff" "%%~dpnf"
)
PAUSE

@echo off
setlocal
set FOLDER_PATH=D:\test
for %%f in (%FOLDER_PATH%\*.new) do if "%%~ff" neq "%~f0" (
    if exist "%%~dpnf" ECHO del "%%~dpnf"
    ECHO rename "%%~ff" "%%~nf"
)
PAUSE

请注意,操作movedelrename)命令仅用于ECHO以进行调试。

另请注意,if "%%~ff" neq "%~f0"可以省略*.new个文件,因为%~f0的扩展名为.bat.cmd(尝试echo %~x0 %~f0

资源(必读):

答案 1 :(得分:0)

  1. 您错过了\中的%FOLDER_PATH%\*
  2. 您只想重命名*.new个文件,那么为什么不使用此模式而不是*?如果您对匹配模式*.txt.new的文件感兴趣,请指定此项而不是*
  3. 不需要变量basename;只需使用%%~nf删除(最后)后缀(.new)。
  4. 如果目标文件已存在,ren命令会抛出错误;由于您希望覆盖它,请改用move /Y。添加> nul以隐藏摘要1 file(s) moved.
  5. 解决了第2项后删除if查询。
  6. 总而言之,您的脚本可以简化为:

    @echo off
    set "FOLDER_PATH=D:\test"
    rem // Ensure to specify the correct pattern, `*.new` or `*.txt.new`:
    for %%f in ("%FOLDER_PATH%\*.txt.new") do (
        > nul move /Y "%%~f" "%%~nf"
    )
    pause
    

答案 2 :(得分:0)

问题无效答案无效

源1

@echo off
set FOLDER_PATH=D:\test
cd /d "%FOLDER_PATH%"
ren "*.txt.new" "*.txt"

源2

@echo off
set FOLDER_PATH=D:\test
cd /d "%FOLDER_PATH%"
ren "*.txt" "*.txt.new"