Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Batch file 从多个文本文件中抓取第n行以重命名匹配的pdf文件_Batch File_For Loop_Text_Command Line - Fatal编程技术网

Batch file 从多个文本文件中抓取第n行以重命名匹配的pdf文件

Batch file 从多个文本文件中抓取第n行以重命名匹配的pdf文件,batch-file,for-loop,text,command-line,Batch File,For Loop,Text,Command Line,我正在尝试创建一个批处理脚本来处理多达50个文本文件。存在与文本文件具有匹配文件名的PDF。我试图从文本文件中抓取第12行,并将其相应的PDF文件重命名为整个第12行的内容。到目前为止,我已经能够通过引用一个特定的文件来做到这一点: 对于/F“tokens=1*delims=:”%%A in('findstr/n.*.File1.txt')DO( 如果“%%A”eq“12”ren”File1.pdf“%%B.pdf” ) 我很难接受这一行并让它通过多个文件进行解析。这些文件也位于一个有空格的目录

我正在尝试创建一个批处理脚本来处理多达50个文本文件。存在与文本文件具有匹配文件名的PDF。我试图从文本文件中抓取第12行,并将其相应的PDF文件重命名为整个第12行的内容。到目前为止,我已经能够通过引用一个特定的文件来做到这一点:

对于/F“tokens=1*delims=:”%%A in('findstr/n.*.File1.txt')DO( 如果“%%A”eq“12”ren”File1.pdf“%%B.pdf” )

我很难接受这一行并让它通过多个文件进行解析。这些文件也位于一个有空格的目录路径中。任何帮助都将不胜感激

@ECHO关闭
SETLOCAL
设置“sourcedir=U:\sourcedir\t w o”
对于(“%sourcedir%\*.txt”)中的%%a,如果存在请执行“%%~dpna.pdf”(
设置未更改=Y
对于/f“usebackqskip=11delims=“%%b IN”(“%%a”)如果定义不变,则执行(
ECHO(REN“%%~dpna.pdf”“%%b.pdf”
设置“未更改=”
)
)
后藤:EOF
所需的REN命令仅用于测试目的。
ECHO
ed。验证命令正确后,将
ECHO(REN
更改为
REN
以实际重命名文件

您需要更改
sourcedir
的设置以适应您的环境

@echo off
pushd "your folder with spaces in name"
for /f "eol=: tokens=1,3 delims=:" %%A in (
  'findstr /n "^" *.txt ^|findstr "^[^:]*:12:"'
) do if exist "%%~nA.pdf" ren "%%~nA.pdf" "%%B"
popd
第一个FINDSTR列出了所有.TXT文件的内容。每行输出都有其格式

fileName:lineNumber:content
第二个FINDSTR只保留每个文件的第12行

FOR/F解析结果,在第一个冒号之前提取文本文件名,在第二个冒号之后提取内容(新文件名)。冒号在文件名中无效,因此我假设内容中从来没有冒号


最后,DO部分验证PDF是否存在,然后将其重命名。

只是一条空闲注释,在本例中,
findstr“^[^:::*:12:“
可以是
findstr”:12:”
因为文件名或重命名文件的文本都不能包含
@foxidrive-我认为这不是一个安全的假设。我们不知道第1-11行是什么样子,也不知道第13行及以上是什么样子。但是感谢您修复管道。不用担心。我现在知道您在使用包含
:12: