可以使用这个脚本,将一些不合法字符去除掉。
1、检查上传的文件中名或文件夹中是否真的含有这些字符\/:*?"|,一般不会存在的,因为电脑系统会自动拒绝掉这些字符。2、文件名称以及文件夹名称的开头或结尾是否含有空格,一定要注意文件夹名称前后是不可以用空格的,文件名称可以用但一般尽量不要用,不合常规。3、遇到这个问题,可以尝试更改下文件夹名称和文件名称成普通名称,如果改好后没有问题,那么说明原名称是有问题的。4、直接下载最新的百度网盘,最新版本经测试没有发现这类问题。文件名不能包含/:*?,这些字符是英文状态下的,Windows操作系统不让我们用,我们可以用中文状态下的对应字符即可,注意要设置成全角和中字标点状态下输入字符才可以的。文件名不能包含的字符有:”(双引号)、*(星号)、(大于)、?(问号)、\(反斜杠)、|(竖线)、/ (正斜杠)、 : (冒号),这些字符操作系统是不让你用在文件名称中的,如果使用就会重命名无效,并且弹出警示框。文件名除了不能用的特殊字符外,还能一些特定的系统保留名称也是不能用的,它们是:CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8 、 LPT9。
[Python] 纯文本查看 复制代码import os
import re
from pathlib import Path
# 定义一个函数来清理文件名和目录名
def clean_name(name):
# 保留中文、英文、数字、点、破折号、下划线
pattern = re.compile(r'[^\u4e00-\u9fa5a-zA-Z0-9。#《》._-:+()()@]+')
return pattern.sub('', name)
# 递归遍历目录并清理目录名
def clean_directories(path):
for root, dirs, files in os.walk(path, topdown=False):
for dir_name in dirs:
cleaned_name = clean_name(dir_name)
try:
os.rename(os.path.join(root, dir_name),
os.path.join(root, cleaned_name))
except OSError as e:
print(f"Error renaming directory {dir_name}: {e}")
# 递归遍历目录并清理文件名
def clean_files(path):
for root, dirs, files in os.walk(path):
for file_name in files:
cleaned_name = clean_name(file_name)
try:
os.rename(os.path.join(root, file_name),
os.path.join(root, cleaned_name))
except OSError as e:
print(f"Error renaming file {file_name}: {e}")
# 递归遍历目录并重命名图片文件
def rename_images(path):
image_extensions = ['.png', '.jpg', '.jpeg',
'.gif', '.bmp', '.tiff', '.svg']
for root, dirs, files in os.walk(path):
for file_name in files:
extension = os.path.splitext(file_name)[1].lower()
if extension in image_extensions:
dir_name = Path(root).name
new_file_name = f"{clean_name(dir_name)}_{
clean_name(file_name)}"
try:
os.rename(os.path.join(root, file_name),
os.path.join(root, new_file_name))
except OSError as e:
print(f"Error renaming image {file_name}: {e}")
# 主函数
def main():
current_dir = os.getcwd()
# 第一次遍历:清理目录名
clean_directories(current_dir)
# 第二次遍历:清理文件名
clean_files(current_dir)
# 第三次遍历:重命名图片文件
rename_images(current_dir)
if __name__ == "__main__":
main()