Java 删除文件名的部分字符

Java 删除文件名的部分字符,java,python,bash,perl,cmd,Java,Python,Bash,Perl,Cmd,我试图删除文件名中特定字符后的部分内容 当前文件名: 我想要的是什么 这些文件位于C:\users\%username%\rename中 任何帮助/提示都将不胜感激我将使用indexOf()方法定位~符号,并使用substring()方法在~之前剪切零件,或者在~之后无任何内容地替换零件 然后我将重命名该文件或使用正确的名称创建一个新文件,并将旧文件的内容复制到新文件。这是我的方法更改所需目录的路径 import os import glob path = 'c:\\rename' file

我试图删除文件名中特定字符后的部分内容

当前文件名:

我想要的是什么

这些文件位于C:\users\%username%\rename中

任何帮助/提示都将不胜感激

我将使用
indexOf()
方法定位
~
符号,并使用
substring()
方法在
~
之前剪切零件,或者在
~
之后无任何内容地替换零件


然后我将重命名该文件或使用正确的名称创建一个新文件,并将旧文件的内容复制到新文件。

这是我的方法更改所需目录的路径

import os
import glob

path = 'c:\\rename'

files = [f for f in glob.glob(path + "**/*.pdf", recursive=True)]

for f in files:
    try:
        new = f.split('~')[0].replace(path,'').strip()
        os.rename(r'{}'.format(f), r'{}\{}.pdf'.format(path,new))
    except:
        print('cannot be renamed')

因此,您希望删除一个tilde(“~”)后跟“DEL”、另一个tilde和一个或多个数字的序列

在Perl中,这将是:

s/~DEL~\d+//;
将其纳入完整的测试计划:

#!/usr/bin/perl

use strict;
use warnings;

while (<DATA>) {
  s/~DEL~\d+//;
  print;
}

__DATA__
KM_003__Rheihe 4~DEL~389948.pdf
KM_004__Reite 2 und Reite 3~DEL~391098.pdf
KM_008__Grundriss~DEL~391042.pdf

您现在可以直接使用此代码

import re
import os
filenames = os.listdir(r'C:\Users\Asus\Desktop\\')
for filename in filenames:
    os.rename(r'C:\Users\Asus\Desktop\\'+ filename,r'C:\Users\Asus\Desktop\\'+ re.findall('([A-Za-z0-9_ ]*)~',filename)[0] +'.pdf')

到目前为止你试过什么?为什么不起作用?你试过什么?你有什么问题?请向我们展示您的代码。您是否要求重命名该文件-删除“~”和“.”(不包括“.”)之间的所有特许协议?此外,问题被标记为“perl”、“java”、“python”和“bash”-您正在寻找哪种解决方案,在bash中有标记bash,您可以使用子字符串移除-这将更容易,并且不需要外部工具。我收到一个错误文件“C:\Users\NN\Desktop\Split\Split.py”,第8行path='C:\Users\NN\Desktop\Split\\\'^SyntaxError:(unicode错误)'UnicodeScape'编解码器无法解码位置2-3的字节:截断\uxxxxxxx转义符让我编辑它,可能是因为它读取的pdf文件中没有“~”字符,请重试,文件“C:\Users\NN\Desktop\Split\Split.py”,第9行path='C:\Users\NN\Desktop\Split'^SyntaxError:(unicode错误)'UnicodeScape'编解码器无法解码位置2-3中的字节:截断\uxxxxxxx转义您在路径上使用了双反斜杠吗?C:\\Users\\NN\\Desktop\\split如何定义文件名,我有超过200000个文件。我已经编辑了答案,将获得所有文件的名称并对其进行重命名。请问您是如何定义数据的?@Henri2:the
DATA
filehandle只是一个快速破解,可以用来演示我在这里所做的解决方案。它返回可以在Perl代码底部的
\uuuu data\uuuu
标记后面找到的数据。显然,您将使用任何适当的机制读取数据。
#!/usr/bin/perl

use strict;
use warnings;

while (<DATA>) {
  s/~DEL~\d+//;
  print;
}

__DATA__
KM_003__Rheihe 4~DEL~389948.pdf
KM_004__Reite 2 und Reite 3~DEL~391098.pdf
KM_008__Grundriss~DEL~391042.pdf
KM_003__Rheihe 4.pdf
KM_004__Reite 2 und Reite 3.pdf
KM_008__Grundriss.pdf
import re
import os
filenames = os.listdir(r'C:\Users\Asus\Desktop\\')
for filename in filenames:
    os.rename(r'C:\Users\Asus\Desktop\\'+ filename,r'C:\Users\Asus\Desktop\\'+ re.findall('([A-Za-z0-9_ ]*)~',filename)[0] +'.pdf')