Board logo

标题: [文本处理] [已解决]批处理如何把文件名横向排列并用分隔符隔开? [打印本页]

作者: ahgogo    时间: 2015-7-2 10:04     标题: [已解决]批处理如何把文件名横向排列并用分隔符隔开?

本帖最后由 ahgogo 于 2015-7-5 11:42 编辑

我想实现文件夹里的文件名横向排列并用字符分隔开,不知道怎样实现,求大神帮助!

只会用DIR命令列出文件名
dir *.* /b> 1.txt

1.jpg
2.jpg
3.jpg
4.jpg
...
//------------------------------

我想输出的1.txt里是这样的  1.jpg|2.jpg|3.jpg|4.jpg|...
作者: pcl_test    时间: 2015-7-2 11:46

  1. @(for /f "delims=" %%a in ('dir /a-d /b^|findstr /iv "bat$"') do @set /p=%%a^|)<nul>"1.txt"
复制代码

作者: ahgogo    时间: 2015-7-2 16:19

回复 2# pcl_test

非常感谢,很好用,
作者: ahgogo    时间: 2015-7-3 17:34

追问:如果在文件名前面加上路径该怎么写呢
如果图片都放在pic文件夹里(C:\Users\Administrator\Desktop\test\images\pic)
我想取出 images\pic 文件夹路径放到图片前面
images/pic/1.jpg|images/pic/2.jpg
作者: CrLf    时间: 2015-7-3 19:14

使用第三方命令 hash
  1. hash /printf:"%s|"
复制代码

作者: ahgogo    时间: 2015-7-3 21:45

怎样加到这个批处理中呢,我不会用这个

@(for /f "delims=" %%a in ('dir /a-d /b^|findstr /iv "bat$"') do @set /p=%%a^|)<nul>"1.txt"
作者: pcl_test    时间: 2015-7-3 22:58

回复 4# ahgogo


  然而你并没有说清楚路径的截取规则,从上一级目录到图片当前目录吗?
作者: CrLf    时间: 2015-7-4 00:04

获取相对路径的技巧:
  1. @(for /f "delims=" %%a in ('findstr /s /m .* *^|findstr /iv "bat$"') do @set /p=%%a^|)<nul>"1.txt"
复制代码

作者: ahgogo    时间: 2015-7-5 00:00

@pcl_test 是从上一级目录到图片当前目录,可能我描述的不是很好理解

为什么我运行bat的时候输出了1.txt,打开后什么都没有呢,是我电脑配置的问题吗,java环境也配置好的!
作者: pcl_test    时间: 2015-7-5 09:08

本帖最后由 pcl_test 于 2015-7-5 15:38 编辑
  1. @set @n=0; /* & echo off
  2. for /f "delims=" %%a in ('echo;%~dp0^|cscript -nologo -e:jscript "%~0"') do set "fpath=%%a"
  3. (for %%b in (*.jpg *.bmp *.gif *.png *.jpeg) do set /p=%fpath%%%b^|)<nul>"1.txt"
  4. echo;完成
  5. ping -n 2 0 >nul&exit & rem */
  6. var str = "";
  7. var Arr = new Array();
  8. var Arr = WScript.StdIn.ReadLine().split("\\");
  9. if (Arr.length<3) {
  10.     str = Arr[1];
  11. }else if (Arr.length==3){
  12.     str = Arr[1]+"\\"+Arr.pop();
  13. }else{
  14.     str = Arr[Arr.length-3]+"\\"+Arr[Arr.length-2]+"\\"+Arr.pop();
  15. }
  16. WScript.Echo(str);
复制代码

作者: tmplinshi    时间: 2015-7-5 10:14

  1. @echo off
  2. (for %%a in (*) do (
  3. for /f "delims=| tokens=1,2" %%b in ("%%~dpa\..|%%a\..") do (
  4. set /p "=%%~nxb\%%~nxc\%%~nxa|"<nul
  5. )
  6. )) >"1.txt"
复制代码

作者: ahgogo    时间: 2015-7-5 11:41

感谢楼上各位的热心帮助,问题已解决,@pcl_test 命令执行后输出还是空的。@tmplinshi版主的方案可以,已采用,谢谢你们!
作者: pcl_test    时间: 2015-7-5 15:40

回复 12# ahgogo

因为你的目录结构不对,已修改,能适应不同层次的目录结构
作者: CrLf    时间: 2015-7-5 16:52

8 楼代码有什么问题吗?
findstr /s /m .* * 取得的就是相对路径
作者: ahgogo    时间: 2015-7-7 12:01

我也不知道,运行后输出的是空的,但是我换了台电脑是可以的,估计是电脑的问题吧
作者: CrLf    时间: 2015-7-7 17:03

回复 10# pcl_test


    rem 可以省掉
作者: freesoft00    时间: 2015-7-7 18:57

本帖最后由 freesoft00 于 2015-7-7 19:13 编辑

回复 2# pcl_test

请教两个问题:
"bat$"是什么意思,没有太明白
导入到文件我知道的是>  或者>>
你代码最后面对<nul>"1.txt是否可以解释一下是怎么回事?
do @set /p=%%a^|改为do @set p=%%a^|不行吗?为什么要添加一个/呢?
希望能给解释一下。
作者: pcl_test    时间: 2015-7-7 19:08

回复 17# freesoft00

"bat$"结合findstr /v 就是排除批处理文件
<nul,实际是set /p=变量<nul的一部分,实现退格
作者: freesoft00    时间: 2015-7-7 19:16

回复 18# pcl_test


"bat$"结合findstr /v 就是排除批处理文件

哦,这个文件夹中有这个批处理文件,所以要排除一下这个扩展名的文件,对吧,我说呢,怎么处理图像文件排除中出现一个bat是干什么用的。
谢谢了!
作者: ahgogo    时间: 2016-1-4 23:07     标题: RE: [已解决]批处理如何把文件名横向排列并用分隔符隔开?

又遇到问题,请各位帮忙

@echo off

(for %%a in (*) do (
        for /f "delims=| tokens=1,1" %%b in ("%%a\.") do (
                set /p "=%%~nxa|"<nul
        )
)) >"list.txt"

我想在这个批处理中实现输出文件名按文件的大小进行排序,或者按时间排序,怎样操作!
作者: DAIC    时间: 2016-1-4 23:28

回复 20# ahgogo
  1. @echo off
  2. REM S  按大小(从小到大)
  3. REM D  按日期/时间(从先到后)
  4. (for /f "delims=" %%a in ('dir /b /a-d /oS') do (
  5.     for /f "delims=| tokens=1,1" %%b in ("%%a\.") do (
  6.         set /p "=%%~nxa|"<nul
  7.     )
  8. ))>"list.txt"
复制代码

作者: ahgogo    时间: 2016-1-5 10:00

回复 21# DAIC
谢谢你的解答,
我试了下按大小排序是有效果的,但是按时间排序没有反应,怎么回事!
作者: gawk    时间: 2016-1-5 10:31

回复 22# ahgogo


dir /b /a-d /od
dir /b /a-d /o-d
分别执行两个命令,观察一下差异。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2