如何通过在文件扩展名.json之前插入一个字符串来重命名文件夹中的所有* .json文件?

时间:2017-09-25 12:03:14

标签: batch-file

我在apps\*.json内的不同文件夹中有JSON文件。

如何通过在名称中添加后缀来重命名所有这些?

a.jsona_file.json
b.jsonb_file.json

以下是我尝试过的内容,但它没有生成预期的文件名。

@echo off & setlocal EnableDelayedExpansion 

for /f "delims=" %%i in ('dir /b *.json') do (
    ren "%%i" "_file.json" 
) 

如何撤消此操作?

a_file.jsona.json

2 个答案:

答案 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"

==>

资源(必读,不完整):

答案 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文件。