【发布时间】:2017-10-31 18:25:00
【问题描述】:
我有一个具体的问题,我找不到。
有一个文件夹,里面是.txt文件,采用cp866编码,结构如下:
directory
‐‐2004_lpq.txt
--2006_lpq_jargon.txt
--barlou.txt
我需要在不更改文件名和目录结构的情况下将所有.txt文件转换为utf-8。
这是我的代码:
@echo off
for /r %1 %%f in (*.txt) do (
iconv -c -f cp866 -t utf-8 %%f > %%f.temp
echo converted %%f
move %%f.temp %%f
)
我如何运行脚本:
converter.cmd directory
输出:
converted "E:\YandexDisk\Учеба\OS\CMDProblem\directory\2004_lpq.txt"
Moving files: 1.
converted "E:\YandexDisk\Учеба\OS\CMDProblem\directory\2006_lpq_jargon.txt"
Moving files: 1.
converted "E:\YandexDisk\Учеба\OS\CMDProblem\directory\barlou.txt"
Moving files: 1.
converted "E:\YandexDisk\Учеба\OS\CMDProblem\directory\2004_lpq.txt"
Moving files: 1.
converted "E:\YandexDisk\Учеба\OS\CMDProblem\directory\2006_lpq_jargon.txt"
........
在其他机器上它工作正常。可能是什么问题?
【问题讨论】:
-
当
.temp文件被移动并重命名为.txt时,它会再次被For括号内的*.txt拾取。您最好在For循环之外执行Moves。 -
我想过,但在其他计算机上工作是正确的!有点奇怪。
-
是的。此行为取决于几个细节,包括每台计算机中文件系统的类型。最简单的解决方案是将您的
for /r %1 %%f in (*.txt) do (命令更改为等效的for /F "delims=" %%f in ('dir /S /A-D /B %1\*.txt') do (命令,其中dir命令在处理任何文件之前只弹出一次...
标签: loops batch-file cmd infinite