文件名未排序

时间:2011-04-04 22:29:18

标签: batch-file

setlocal EnableDelayedExpansion
set "var=xxxxxxxxxxx\"
Test.txt echo !var!
set "var1=$(LOCAL_PATH)/batch/"
set "var2=:/data/local/12m/batch/"
set "var3=$(LOCAL_PATH)/"
set "var4=:/data/local/12m/"

for %%a in (batch/*.bat) do (
    >>Test.txt echo !var1!%%a!var2!%%a \
) 

for %%a in (*.bmp) do (
    >>Test.txt echo !var3!%%a!var4!%%a \
) 

for %%a in (*.wav) do (
    >>Test.txt echo !var3!%%a!var4!%%a \
) 

for %%a in (*.cfg) do (
    >>Test.txt echo !var3!%%a!var4!%%a \
) 

问题:文件名应该在Test.txt中排序,但不是(.bat文件应按排序顺序,后跟.bmp文件按排序顺序等)。如何解决这个问题?

注意:有一个>>在Test.txt前面的操作员到处都是,但由于某种原因,这个编辑器删除了它...例如它是>> test.txt echo!var1“

由jeb编辑:您应该使用代码格式并阅读右侧的如何格式化帮助。

由于 SSE @jeb:我注意到如果我在本地驱动器/文件夹中运行批处理文件,文件就会被排序,如果我在映射驱动器中运行批处理文件,文件就不会被排序。我需要这个在我的映射驱动器中工作。将内容复制到每种文件类型的单个输出文件,然后将所有内容复制到一个文件也不会对映射驱动器中的文件进行排序。我正在使用Windows 7.这是一个Windows 7问题吗?映射的驱动器是Linux服务器上本地工作空间的映射。我相信它遵循ext2文件系统。

@Niel @Robert Harvey:我试过了for /F "delims=" %%a in ('dir /b /on batch\*.bat') do,但它根本没有复制任何批处理文件...我的输出文件是空的

3 个答案:

答案 0 :(得分:1)

for不会对您的文件名进行排序。您可以创建(四个)临时文件并对结果进行排序并将其输出到最终文件。或者您可以使用扩展for语法来读取dir/b/o的输出。

答案 1 :(得分:0)

也许你的文件有数字作为名称,然后它们也按字符串比较排序,它们没有按数字排序。

样品。 2大于10,因为它们被比较为字符串 因此,正常(和正确)排序列表可能是

  • 1
  • 10
  • 12
  • 2
  • 20

如果您的排序在另一点失败,请显示一些样本

答案 2 :(得分:0)

setlocal EnableDelayedExpansion
set "var=xx"
>>Test1.txt echo !var!
set "var1=yy"
set "var2=zz"
set "var3=aaa"
set "var4=bb"
set "var5=cc"

for %%a in (batch/*.bat) do (
>>Test2.txt echo !var1!%%a!var2!%%a \
)
for %%a in (*.bmp) do (
>>Test3.txt echo !var3!%%a!var4!%%a \
)
for %%a in (*.wav) do (
>>Test4.txt echo !var3!%%a!var4!%%a \
) 
for %%a in (*.cfg) do (
>>Test5.txt echo !var3!%%a!var4!%%a \
) 
@echo off
sort Test2.txt>>Test1.txt
sort Test3.txt>>Test1.txt
sort Test4.txt>>Test1.txt
sort Test5.txt>>Test1.txt

setlocal EnableDelayedExpansion
>>Test1.txt echo !var5!

del Test2.txt
del Test3.txt
del Test4.txt
del Test5.txt

现在正在写入五个不同的文件,并在追加到第一个文件之前对每个文件进行排序。这对我来说很有用。欢迎任何改进此代码的建议