我有一大堆的文件用文件使用我们可爱的瑞典语的字母 å åö.由于各种原因现在我需要把这些给一个[a-zA-Z]的范围。只是删除任何在这个范围之外是相当容易的。这件事引起我的麻烦是,我想代替 å一个, öo 等等。

这是charset麻烦在他们的最糟糕的。

我有一套测试文件:

files\Copy of New Text Documen åäö t.txt
files\fofo.txt
files\New Text Document.txt
files\worstcase åäöÅÄÖéÉ.txt

我把我的剧本上的这个线路、管道它的结果成为各种各样的命令

for %%X in (files\*.txt) do (echo %%X) 

的奇怪的事情是,如果我打印的结果,这种(纯为循环)转入一个文件,我得到这个输出:

files\Copy of New Text Documen †„” t.txt
files\fofo.txt
files\New Text Document.txt
files\worstcase †„”Ž™‚.txt

这样的东西怪异的事情发生到我的文件之前,他们甚至达到其他工具(我一直在试图做到这一使用一个sed口Windows从一些所谓的GnuWin32但没有运气,迄今为止),并做的更换上这些字符毫无帮助。

你会怎么解决这个问题?我很开放的任何类型的工具,命令行或否则...

编辑: 这是一个时间问题,所以我在寻找一个快速'n丑陋的修正

有帮助吗?

解决方案

你可以使用这个代码(蟒蛇)

重命名的国际文件

# -*- coding: cp1252 -*-

import os, shutil

base_dir = "g:\\awk\\"    # Base Directory (includes subdirectories)
char_table_1 = "áéíóúñ"
char_table_2 = "aeioun"

adirs = os.walk (base_dir)

for adir in adirs:
    dir = adir[0] + "\\"          # Directory
    # print "\nDir : " + dir

    for file in adir[2]:    # List of files
        if os.access(dir + file, os.R_OK):
            file2 = file
            for i in range (0, len(char_table_1)):
                file2 = file2.replace (char_table_1[i], char_table_2[i])

            if file2 <> file:
                # Different, rename
                print dir + file, " => ", file2
                shutil.move (dir + file, dir + file2)

###

你要改变你的编码和你char表(我测试这个脚本用西班牙文件和工作优良)。你可以评论的"移动"的行检查,如果它的工作"确定",并删除的意见后做的重新命名。

其他提示

你可能会有更多的运气在cmd.exe 如果你打开它以UNICODE模式。使用"cmd/U"。

其他人已经提议使用一个真正的编程语言。这很好,尤其是如果你有一个语言都非常舒适。我的朋友在C#队说,C#3.0(与皇宫)是适用于煽动快速、小型方案是这样。他已经停止了书面批文件的大部分时间。

就个人而言,我会选择置。这个问题是可以解决的正确命令行,并在一个单一的线。我

编辑:这不是一条线,但它不是一个很大的代码。此外,它看起来像计算器不喜欢的语法"$_.名称",并呈现_为_.

$mapping = @{ 
    "å" = "a"
    "ä" = "a"
    "ö" = "o"
}

Get-ChildItem -Recurse . *.txt | Foreach-Object { 
    $newname = $_.Name      
    foreach  ($l in $mapping.Keys) {
        $newname = $newname.Replace( $l, $mapping[$l] )
        $newname = $newname.Replace( $l.ToUpper(), $mapping[$l].ToUpper() )
    }
    Rename-Item -WhatIf $_.FullName $newname    # remove the -WhatIf when you're ready to do it for real.
}

我会写这C++,C#或Java--环境里我知道你可以得到的Unicode字出的路径正常。它总是不确定的用命令行工具,尤其是出的Cygwin。

那么代码是一个简单的发现/替换或regex/替换。如果你能名称一语言会很容易编写代码。

我会写一vbscript(WSH)扫描的目录,然后传送的文件名的一个功能,打破了该文件成为他们的个人信件,然后做一个选择的情况下,在瑞典的人,并取代他们有你想要的人。或者,不这样做的功能只是放弃它通过了一堆的更换()职能,重新分配的输出输入串。在结束它,然后重新命名的文件的新的价值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top