2017-09-25 63 views
1

我有apps\*.json內的不同文件夾中的JSON文件。如何通過在文件擴展名.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

+0

試試這個> https://stackoverflow.com/questions/36753012/how-to-replace-recursively-part-of-file-name-in-bash/ – Aditya

回答

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" 

==> 

資源(需要讀取,不完全的):

+0

謝謝你的詳細答案。 – AmitJS94

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引用沒有文件擴展名且沒有路徑的文件名,如在co中運行的幫助輸出所解釋的提示窗口for /?

另外使用DIR選項/s遞歸處理當前目錄及其所有子目錄中的所有* .json文件。

相關問題