我在apps\*.json
内的不同文件夹中有JSON文件。
如何通过在名称中添加后缀来重命名所有这些?
a.json
至a_file.json
b.json
至b_file.json
以下是我尝试过的内容,但它没有生成预期的文件名。
@echo off & setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('dir /b *.json') do (
ren "%%i" "_file.json"
)
如何撤消此操作?
a_file.json
至a.json
答案 0 :(得分:2)
以下评论批处理脚本应该同时执行这两项操作:
_file
后缀,_file
后缀(即使在指定dir /b /S
而不是dir /b
的所有子文件夹中):
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
::: change next 3 lines to match current circumstances:
set "suffix=_file" suffix to add/remove
set "extens=json" file extension
set "folder=D:\test\SO\46404782" working directory
::: set working directory
pushd "%folder%"
if "%~1"=="" (
rem reverse
for /F "delims=" %%G in ('dir /b *%suffix%.%extens% 2^>NUL') do (
set "newname=%%~G"
set "newname=!newname:%suffix%.%extens%=.%extens%!"
ECHO ren "%%~fG" "!newname!"
)
) else (
rem add suffix
for /F "delims=" %%G in ('dir /b *.%extens% 2^>NUL') do (
ECHO ren "%%~fG" "%%~nG%suffix%%%~xG"
)
)
popd
请注意,仅使用ren
显示高效ECHO
命令以进行调试。
示例输出:
==> D:\bat\SO\46404782.bat
ren "D:\test\SO\46404782\c_file.json" "c.json"
==> D:\bat\SO\46404782.bat 1
ren "D:\test\SO\46404782\a.json" "a_file.json"
ren "D:\test\SO\46404782\b.json" "b_file.json"
ren "D:\test\SO\46404782\c_file.json" "c_file_file.json"
==>
资源(必读,不完整):
%~nG
,%~xG
,%~1
等特殊页面)Command Line arguments (Parameters) !newname:%suffix%.%extens%=.%extens%!
等)Variable Edit/Replace 答案 1 :(得分:1)
附加_file
的简单解决方案正在命令提示符窗口中运行:
for /f "delims=" %i in ('dir /b *.json') do @ren "%i" "%~ni_file.json"
在批处理文件%
中必须使用一个百分号转义转义:
for /f "delims=" %%i in ('dir /b *.json') do @ren "%%i" "%%~ni_file.json"
%~ni
或%%~ni
引用没有文件扩展名且没有路径的文件名,如命令提示符窗口for /?
中运行的帮助输出所述。
另外使用 DIR 选项/s
来递归处理当前目录及其所有子目录中的所有* .json文件。