Windows 批量重命名.7k文件

Windows 批量重命名.7k文件,windows,cmd,command-prompt,batch-processing,file-rename,Windows,Cmd,Command Prompt,Batch Processing,File Rename,我想使用前缀为“g_x_”的命令提示符重命名文件。原始文件名的结构为: 000_1565.7k 我试过: ren *.7k g_x_*.7k 该代码将文件重命名为“g_x_1565.7k”,但我确实需要将文件命名为“g_x_000_1565.7k” 你知道为什么代码会删除部分原始文件名吗 谢谢 DH将每个文件的文件名存储在一个变量中,并在其前面加上“g_x_”+变量名 如果所有文件都以000开头,请在命令行上使用以下命令: %的?在(000.*.7k)中,ren%吗?g_x_%? 在批处理文件

我想使用前缀为“g_x_”的命令提示符重命名文件。原始文件名的结构为:

000_1565.7k

我试过:

ren *.7k g_x_*.7k
该代码将文件重命名为“g_x_1565.7k”,但我确实需要将文件命名为“g_x_000_1565.7k”

你知道为什么代码会删除部分原始文件名吗

谢谢


DH

将每个文件的文件名存储在一个变量中,并在其前面加上“g_x_”+变量名

如果所有文件都以000开头,请在命令行上使用以下命令:

%的
?在(000.*.7k)中,ren%吗?g_x_%?

在批处理文件中,使用:

%%的
?在(000.*.7k)中,ren%吗?g_x_%%?

@ECHO OFF
SETLOCAL
FOR /f "delims=" %%a IN (
  'dir /b /a-d *_*.7k ^|findstr /v /b /l "g_x_" '
 ) DO (
  REN "%%a" "g_x_%%a"   
)
GOTO :EOF
dir
查找与
*.*.7k
匹配的文件名,并通过管道传输到
FINDSTR
,该管道仅允许通过那些不匹配(
/v
)的名称在开头(
/b
)字符串
“g\u x”
)。管道前的插入符号(
^
)需要告诉CMD管道是要由
for
执行的命令的一部分,而不是
dir
的参数

然后将生成的文件名分配给
%%a
,并在前面加上前缀并重命名


这种方法首先生成现有文件名的列表,然后处理该列表。如果试图就地重命名,则可能会将文件aaa_bbb.7k重命名为g_x_aaa_bbb.7k,然后再次重命名为g_x_g_x_aaa_bbb.7k…

这是@PeterWright解决方案的修改版本,但如果需要,它允许您在
目录中添加
/s
开关以处理子目录

目前,它只会将重命名命令回显到屏幕上-因此,如果您喜欢屏幕上显示的内容,请删除
echo
,以启用重命名

@ECHO OFF
FOR /f "delims=" %%a IN (' dir /b /a-d *_*.7k ') DO (
 echo REN "%%a" "g_x_%%~nxa"   
)
pause

你能再解释一下吗?更新的答案。比我想象的要简单。如果您需要进一步的帮助,请告诉我。这将处理一些文件两次。@foxidrive,请详细说明。一个简单的
for in do
逐步收集filespec的文件并处理它们。如果重命名filespec,它将处理一些文件两次,因为它认为这些文件是新文件。这是一个bug,解决方案是使用
FOR/F
DIR
作为开始之前创建所有文件的列表。进一步思考后,可能会发现filespec将不再匹配,因此这将不是一个问题。