Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 按文件名中的两个字符串对文件进行排序:批处理文件_Sorting_Batch File_Cmd - Fatal编程技术网

Sorting 按文件名中的两个字符串对文件进行排序:批处理文件

Sorting 按文件名中的两个字符串对文件进行排序:批处理文件,sorting,batch-file,cmd,Sorting,Batch File,Cmd,我想使用批处理文件按特定顺序对一组文件进行排序。 文件应按楼层编号分组,并按文件名中包含的字符串排序 以下是一些文件名的示例: 我想先按其楼层编号对所有文件进行排序,然后按以下顺序进行排序: 有什么方法可以利用排序命令来组织这项工作吗?当OP没有发布他/她自己的工作时,我不习惯发布代码。但是,我对这个问题很感兴趣,因此这里是一个解决方案: @echo off setlocal EnableDelayedExpansion set "order=RSSI RSRP RSRQ SINR "Tx P

我想使用批处理文件按特定顺序对一组文件进行排序。 文件应按
楼层
编号分组,并按文件名中包含的字符串排序

以下是一些文件名的示例:

我想先按其
楼层
编号对所有文件进行排序,然后按以下顺序进行排序:


有什么方法可以利用
排序
命令来组织这项工作吗?

当OP没有发布他/她自己的工作时,我不习惯发布代码。但是,我对这个问题很感兴趣,因此这里是一个解决方案:

@echo off
setlocal EnableDelayedExpansion

set "order=RSSI RSRP RSRQ SINR "Tx Power" PCI"

rem Extract the "order" string into individual numerated elements
set "i=0"
for %%a in (%order%) do (
   set /A i+=1
   set "order[%%~a]=!i!"
)

rem Process the files and create an array with the desired order
set "lastFloor=0"
for /F "tokens=1-5 delims=_" %%a in ('dir /A:-D /B *.jpg') do (
   set "name[%%b][!order[%%d]!]=%%a_%%b_%%c_%%d_%%e"
   if %%b gtr !lastFloor! set "lastFloor=%%b"
)

rem Process the array elements
for /L %%i in (1,1,%lastFloor%) do (
   for /F "tokens=2 delims==" %%a in ('set name[%%i]') do echo %%a
)
输出:

Floor_1_SomeName_RSSI_Some Trailing Text.JPG
Floor_1_SomeName_RSRP_Some Trailing Text.JPG
Floor_1_SomeName_RSRQ_Some Trailing Text.JPG
Floor_1_SomeName_SINR_Some Trailing Text.JPG
Floor_1_SomeName_TX Power_Some Trailing Text.JPG
Floor_1_SomeName_PCI_Some Trailing Text.JPG
Floor_2_SomeName_RSSI_Some Trailing Text.JPG
Floor_2_SomeName_RSRP_Some Trailing Text.JPG
Floor_2_SomeName_RSRQ_Some Trailing Text.JPG
Floor_2_SomeName_SINR_Some Trailing Text.JPG
Floor_2_SomeName_TX Power_Some Trailing Text.JPG
Floor_2_SomeName_PCI_Some Trailing Text.JPG

您可以在查看批处理文件中的阵列管理。

当OP没有发布自己的工作时,我不习惯发布代码。但是,我对这个问题很感兴趣,因此这里是一个解决方案:

@echo off
setlocal EnableDelayedExpansion

set "order=RSSI RSRP RSRQ SINR "Tx Power" PCI"

rem Extract the "order" string into individual numerated elements
set "i=0"
for %%a in (%order%) do (
   set /A i+=1
   set "order[%%~a]=!i!"
)

rem Process the files and create an array with the desired order
set "lastFloor=0"
for /F "tokens=1-5 delims=_" %%a in ('dir /A:-D /B *.jpg') do (
   set "name[%%b][!order[%%d]!]=%%a_%%b_%%c_%%d_%%e"
   if %%b gtr !lastFloor! set "lastFloor=%%b"
)

rem Process the array elements
for /L %%i in (1,1,%lastFloor%) do (
   for /F "tokens=2 delims==" %%a in ('set name[%%i]') do echo %%a
)
输出:

Floor_1_SomeName_RSSI_Some Trailing Text.JPG
Floor_1_SomeName_RSRP_Some Trailing Text.JPG
Floor_1_SomeName_RSRQ_Some Trailing Text.JPG
Floor_1_SomeName_SINR_Some Trailing Text.JPG
Floor_1_SomeName_TX Power_Some Trailing Text.JPG
Floor_1_SomeName_PCI_Some Trailing Text.JPG
Floor_2_SomeName_RSSI_Some Trailing Text.JPG
Floor_2_SomeName_RSRP_Some Trailing Text.JPG
Floor_2_SomeName_RSRQ_Some Trailing Text.JPG
Floor_2_SomeName_SINR_Some Trailing Text.JPG
Floor_2_SomeName_TX Power_Some Trailing Text.JPG
Floor_2_SomeName_PCI_Some Trailing Text.JPG
您可以在。

@echo off查看批处理文件中的阵列管理
setlocal enableextensions disabledelayedexpansion
rem从命令行检索文件夹。默认情况下为当前文件夹
对于(“%f1”)中的%%a,请设置“文件夹=%%~fa”
rem配置文件的顺序
设置/a“RSSI=1”、“RSRP=2”、“RSRQ=3”、“SINR=4”、“Tx=5”、“PCI=6”
rem%%f-针对指定文件夹中的每个文件
rem%%a%%b%%c-分隔文件名的元素
rem使用元素为文件生成序列号
rem输出序列号和文件名
rem通过管道将生成的列表按序列号排序
rem%%d检索已排序的列表
rem单独的序列号和文件名
rem输出文件名
(
对于(“%folder%\Floor*”)中的%%f,请执行以下操作@(
for/f“tokens=2,4 delims=“%%a in(“%%~nxf”)do@for/f%%c in(“%%b”)do@(
集合/a 10000000+%%a*100000+%%c
回波(%)~nxf
)
)
)| sort | for/f“tokens=1,*”%%d in('findstr^')do@echo(%%e
输出

W:\41597911>dir /B *.jpg
Floor_1_SomeName_PCI_Some Trailing Text.JPG
Floor_1_SomeName_RSRP_Some Trailing Text.JPG
Floor_1_SomeName_RSRQ_Some Trailing Text.JPG
Floor_1_SomeName_RSSI_Some Trailing Text.JPG
Floor_1_SomeName_SINR_Some Trailing Text.JPG
Floor_1_SomeName_TX Power_Some Trailing Text.JPG
Floor_2_SomeName_PCI_Some Trailing Text.JPG
Floor_2_SomeName_RSRP_Some Trailing Text.JPG
Floor_2_SomeName_RSRQ_Some Trailing Text.JPG
Floor_2_SomeName_RSSI_Some Trailing Text.JPG
Floor_2_SomeName_SINR_Some Trailing Text.JPG
Floor_2_SomeName_TX Power_Some Trailing Text.JPG

W:\41597911>sortFiles.cmd
Floor_1_SomeName_RSSI_Some Trailing Text.JPG
Floor_1_SomeName_RSRP_Some Trailing Text.JPG
Floor_1_SomeName_RSRQ_Some Trailing Text.JPG
Floor_1_SomeName_SINR_Some Trailing Text.JPG
Floor_1_SomeName_TX Power_Some Trailing Text.JPG
Floor_1_SomeName_PCI_Some Trailing Text.JPG
Floor_2_SomeName_RSSI_Some Trailing Text.JPG
Floor_2_SomeName_RSRP_Some Trailing Text.JPG
Floor_2_SomeName_RSRQ_Some Trailing Text.JPG
Floor_2_SomeName_SINR_Some Trailing Text.JPG
Floor_2_SomeName_TX Power_Some Trailing Text.JPG
Floor_2_SomeName_PCI_Some Trailing Text.JPG        
@echo关闭
setlocal enableextensions disabledelayedexpansion
rem从命令行检索文件夹。默认情况下为当前文件夹
对于(“%f1”)中的%%a,请设置“文件夹=%%~fa”
rem配置文件的顺序
设置/a“RSSI=1”、“RSRP=2”、“RSRQ=3”、“SINR=4”、“Tx=5”、“PCI=6”
rem%%f-针对指定文件夹中的每个文件
rem%%a%%b%%c-分隔文件名的元素
rem使用元素为文件生成序列号
rem输出序列号和文件名
rem通过管道将生成的列表按序列号排序
rem%%d检索已排序的列表
rem单独的序列号和文件名
rem输出文件名
(
对于(“%folder%\Floor*”)中的%%f,请执行以下操作@(
for/f“tokens=2,4 delims=“%%a in(“%%~nxf”)do@for/f%%c in(“%%b”)do@(
集合/a 10000000+%%a*100000+%%c
回波(%)~nxf
)
)
)| sort | for/f“tokens=1,*”%%d in('findstr^')do@echo(%%e
输出

W:\41597911>dir /B *.jpg
Floor_1_SomeName_PCI_Some Trailing Text.JPG
Floor_1_SomeName_RSRP_Some Trailing Text.JPG
Floor_1_SomeName_RSRQ_Some Trailing Text.JPG
Floor_1_SomeName_RSSI_Some Trailing Text.JPG
Floor_1_SomeName_SINR_Some Trailing Text.JPG
Floor_1_SomeName_TX Power_Some Trailing Text.JPG
Floor_2_SomeName_PCI_Some Trailing Text.JPG
Floor_2_SomeName_RSRP_Some Trailing Text.JPG
Floor_2_SomeName_RSRQ_Some Trailing Text.JPG
Floor_2_SomeName_RSSI_Some Trailing Text.JPG
Floor_2_SomeName_SINR_Some Trailing Text.JPG
Floor_2_SomeName_TX Power_Some Trailing Text.JPG

W:\41597911>sortFiles.cmd
Floor_1_SomeName_RSSI_Some Trailing Text.JPG
Floor_1_SomeName_RSRP_Some Trailing Text.JPG
Floor_1_SomeName_RSRQ_Some Trailing Text.JPG
Floor_1_SomeName_SINR_Some Trailing Text.JPG
Floor_1_SomeName_TX Power_Some Trailing Text.JPG
Floor_1_SomeName_PCI_Some Trailing Text.JPG
Floor_2_SomeName_RSSI_Some Trailing Text.JPG
Floor_2_SomeName_RSRP_Some Trailing Text.JPG
Floor_2_SomeName_RSRQ_Some Trailing Text.JPG
Floor_2_SomeName_SINR_Some Trailing Text.JPG
Floor_2_SomeName_TX Power_Some Trailing Text.JPG
Floor_2_SomeName_PCI_Some Trailing Text.JPG        

这里是另一种使用临时文件的方法;它保存一个匹配文件名列表,该列表被多次读取,每个关键字一次
RSSI
RSRP
RSRQ
SINR
TX Power
PCI
(就性能而言,从文件读取比构建文件列表要好)。以下是代码:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“\u FILES=。\Floor\u*\ u*.\ u*..jpg”&rem//(要排序的文件的位置和模式)
rem//创建包含所有匹配文件名列表的临时文件:
>“%~dpn0.tmp”(
rem//捕获文件的筛选列表,并将其拆分为`.`-分隔的标记:
对于/F“令牌=1-4*delims=“%%A in('
目录/B/A:-D/O:N“%_文件%”^|^(
rem/筛选名称与给定模式匹配的文件:^&^
财务报告/R/I/C:“^Floor[0-9][0-9]*.[^.][^.]*.[A-Z][A-Z]*.[^.]jpg$”
^)
""做"(
rem//Pad楼层编号(带前导零):
设置“NUM=0000%%B”
rem/*将楼层编号前缀存储在名为“$floor”的变量中,后跟
rem四位数楼层编号,以获取唯一楼层编号列表:*/
调用集“$FLOOR\%%NUM:~-4%%=%%A\%%B”
rem//将原始文件名写入临时文件:
回声(%%A\%%B\%%C\%%D\%%E
)
)
rem/*通过检索所有变量的排序列表来循环唯一楼层编号
名称以“$FLOOR”开头的rem;以下为零填充的四位数地板
rem number确保升序数字排序顺序(隐式按“set”排序):*/
对于/F“tokens=1,*delims==”%%E in('2^>numset$FLOOR')do(
rem/*从保存当前迭代楼层的临时文件返回文件名
rem编号,带有建议顺序中的特殊关键字(第四个标记):*/
findstr/R/I/C:“^%%F_[^ _][^ _]*.\u RSSI_'%~dpn0.tmp”
findstr/R/I/C:“^%%F_[^][^]*RSRP_'%~dpn0.tmp”
findstr/R/I/C:“^%%F_[^ _][^ _]*RSRQ'%~dpn0.tmp”
findstr/R/I/C:“^%%F_[^ _][^ _]*.\u SINR_'%~dpn0.tmp”
findstr/R/I/C:“^%%F_[^ _][^ _]*.\U TX Power'%~dpn0.tmp”
findstr/R/I/C:“^%%F_[^ _][^ _]*.\u PCI'%~dpn0.tmp”
)
rem//删除临时文件:
删除“%~dpn0.tmp”
端部
退出/B
根据您的示例数据,上述临时文件包含以下列表:

对于由
楼层
和一个数字组成的每个唯一楼层前缀,将按照建议的顺序在上面的列表中逐个搜索预定义的关键字。要获得所有唯一的楼层前缀,将使用名为
$floor
的类似数组的变量集,后跟楼层编号,其各自的值保存楼层p按文件名中显示的前缀进行重新填充。为了使这些前缀以字母数字的方式排序,变量名中的楼层编号由零填充到四位
$FLOOR_0001=Floor_1
$FLOOR_0002=Floor_2
Floor_1_SomeName_RSSI_Some Trailing Text.JPG
Floor_1_SomeName_RSRP_Some Trailing Text.JPG
Floor_1_SomeName_RSRQ_Some Trailing Text.JPG
Floor_1_SomeName_SINR_Some Trailing Text.JPG
Floor_1_SomeName_TX Power_Some Trailing Text.JPG
Floor_1_SomeName_PCI_Some Trailing Text.JPG
Floor_2_SomeName_RSSI_Some Trailing Text.JPG
Floor_2_SomeName_RSRP_Some Trailing Text.JPG
Floor_2_SomeName_RSRQ_Some Trailing Text.JPG
Floor_2_SomeName_SINR_Some Trailing Text.JPG
Floor_2_SomeName_TX Power_Some Trailing Text.JPG
Floor_2_SomeName_PCI_Some Trailing Text.JPG