我正在尝试编写一个脚本,将旧文件内容替换为以下列格式显示的新文件内容:
旧文件: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变量需要在每次迭代中填充旧文件名的名称
答案 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
请注意,操作move
(del
和rename
)命令仅用于ECHO
以进行调试。
另请注意,if "%%~ff" neq "%~f0"
可以省略*.new
个文件,因为%~f0
的扩展名为.bat
或.cmd
(尝试echo %~x0 %~f0
)
资源(必读):
%~ff
等特殊页面)Command Line arguments (Parameters) >
,2>&1
等特殊页面)Redirection 答案 1 :(得分:0)
\
中的%FOLDER_PATH%\*
。*.new
个文件,那么为什么不使用此模式而不是*
?如果您对匹配模式*.txt.new
的文件感兴趣,请指定此项而不是*
。basename
;只需使用%%~nf
删除(最后)后缀(.new
)。ren
命令会抛出错误;由于您希望覆盖它,请改用move /Y
。添加> nul
以隐藏摘要1 file(s) moved.
。if
查询。总而言之,您的脚本可以简化为:
@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"