Windows 批量重命名.7k文件
我想使用前缀为“g_x_”的命令提示符重命名文件。原始文件名的结构为: 000_1565.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_%? 在批处理文件
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将不再匹配,因此这将不是一个问题。