批量删除文件名中的字符而不更改扩展名

时间:2018-09-03 13:30:46

标签: batch-file

下面的批处理代码从文件名中删除了字符“ x”,但也删除了扩展名“ .docx”中的“ x”。如何防止代码重命名扩展名?

for /f "delims=" %%a in ('dir /b /a-d *x*.docx') do (
    set "fname=%%~a"
    setlocal enabledelayedexpansion
    set "nname=!fname:x=!"
    ren "!fname!" "!nname!"
    endlocal
)

2 个答案:

答案 0 :(得分:0)

使用%%~na%%~xa从扩展名中拆分名称,然后仅对名称进行替换,然后只需将新名称与扩展名连接即可。

您也不需要dir cmd。如果文件位于D:\test的根目录中,请运行以下命令:

@echo off
setlocal enabledelayedexpansion
for %%a in ("D:\test\*x*.docx" ) do (
    set "fname=%%~a"
    set "xonly=%%~xa"
    set "nonly=%%~dpna"
    set "nonly=!nonly:x=!"
    ren "!fname!" "!nonly!!xonly!"
)

如果文件位于D:\test内的子目录中,则进行递归搜索:

@echo off
setlocal enabledelayedexpansion
for "D:\Test" /R %%a in (*x*.docx) do (
    set "fname=%%~a"
    set "xonly=%%~xa"
    set "nonly=%%~dpna"
    set "nonly=!nonly:x=!"
    ren "!fname!" "!nonly!!xonly!"
)

请注意,%%~a是驱动器和文件,因此请确保将!nonly!设置为驱动器,路径和名称,即%%~dpna

有关变量替换的更多帮助,请打开cmd.exe并运行for /?

答案 1 :(得分:-2)

df = pd.DataFrame({'user1':[2,4,21,21],'user2':[6,13,76,76],'param1':[0,2,0,1],'param2':['x','a','a','d'],'count':[1,3,2,1]}, columns=['user1','user2','param1','param2','count'])
df = df.set_index(['user1','user2','param1','param2'])
df = df.unstack([2,3]).sort_index(axis=1)

df2 = pd.DataFrame({'user1':[2,5,21],'user2':[6,18,76]})
df2.columns = pd.MultiIndex.from_product([df2.columns, [''],['']])
final_df = df2.merge(df, on=['user1','user2'], how='outer').fillna(0)

从与要重命名的文件相同的文件夹中执行CMD。

请参见Filename parsing in batch file and more idioms