批量操作文件

 Ubuntu

 1.  批量重命名文件为数字编号

进入所需要重命名的数据集的文件夹,在终端运行

$ i=k; for x in ./*; do mv $x pre_$i.mp4; let i=i+1; done  # 'k' is the start number you want, such as 1 or 1000; './*' referes to all files, '*' may cause error, 'pre' is prefix
$ i=k; for x in */xx/*; do mv $x $i.mp4; let i=i+1; done  # rename all files in directory 'xx' of each folder of current directory

 

若文件名等处有空格字符,在terminal中要输入完整文件名时要用‘\ '表示空格' ',即要转义,否则将表示两个参数;并且文件名最好用ls看一下,得到的才是真正的,如文件管理器中看到文件名为Down load,用ls看到文件名为’Down load’,因为Terminal中空格作为有含义的字符需要转译

若文件名里面含有空格等,又希望用命令操作文件,可以使用IFS(Internal Field Seprator) ,内部域分隔符变量,值默认是 space, tab, newline ,用于拆解读入的变量,对command中的特殊字符进行处理,最后重新组合赋值给该变量。只需要重置该变量,用完以后记得还原变量。

$ IFS_old=$IFS
$ IFS=$'\n'
$ i=k; for x in ./*; do mv $x $i.mp4; let i=i+1; done
$ IFS=$IFS_old

 有时改了也没用(不知道为什么),可以选择将有空格等等字符的文件路径用双引号包围,再进行操作、

$ mv "./xxxx  xxx/xxxx" ./xxxxx/xxxx

 

2. 修改所有文件的所有者

$ (sudo) chown user ./*  # use sudo if the original owner is root

 

Windows

  windows系统中,批处理文件为.bat格式。  ——系统性语法参考博客,特殊符号博客和示例博客

  批处理文件中命令不区分大小写

1. 注释  ——示例参考博客

  基本行注释有三种

:: comment      注释内容不会输出
REM comment     注释内容会输出
@REM comment    注释内容不会输出

 

2. for循环

for /r xx in (set) do ...

  这里 /r 是一个参数

/d:仅为目录      如果Set包含通配符(*和?),则对与Set相匹配的每个目录(而不仅是指定目录中的文件组)执行指定的Command
/R:递归        递归进入根目录树[Drive:]Path,在树的每个目录中执行for语句;如果在/R后没有指定目录,则认为是当前目录;如果Set只是一个句点(.),则只枚举目录树
/L:迭代数值范围    使用迭代变量设置起始值(Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值(End#)。/L将通过对Start#与End#进行比较来执行迭代变量
/f:迭代及文件解析   使用文件解析来处理命令输出、字符串及文件内容。使用迭代变量定义要检查的内容或字符串,并使用各种ParsingKeywords选项进一步修改解析方式  ——

  处理指定的 ./next_dir 目录下的 .mp4 文件,并将结果输出到当前文件夹:

for %%i in (./next_dir/*.mp4) do mv "./next_dir/%%i" "output_%%~ni.mp4"

* 注意,这里获取的 %%i 只是 xx.mp4,后面还需要指定其所在文件夹,否则会在当前目录寻找同名文件或找不到。

 

3. 

posted @ 2020-07-25 17:32  谷小雨  阅读(597)  评论(0编辑  收藏  举报