Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.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/5/bash/15.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
Windows 如何在文本文件中搜索字符串(行)的特定部分,然后将其插入变量?_Windows_Bash_Batch File_Full Text Search - Fatal编程技术网

Windows 如何在文本文件中搜索字符串(行)的特定部分,然后将其插入变量?

Windows 如何在文本文件中搜索字符串(行)的特定部分,然后将其插入变量?,windows,bash,batch-file,full-text-search,Windows,Bash,Batch File,Full Text Search,在Windows上使用批处理/BASH: 我想知道如何逐行搜索文本文件(.txt),因为每一行都是它自己的字符串,请查找作为该字符串一部分的位置目录(例如,C:…)。只需取出特定部分并存储在变量中 但每一行都要这样做 任何帮助都将不胜感激 TestRecID TestUserID 5 2017-04-20 TestTAtRec No 2.560 No C:\Test1\Test3 Tester TestRecID TestUserID 5 2017-04-20 TestTAtRec No 2.5

在Windows上使用批处理/BASH: 我想知道如何逐行搜索文本文件(.txt),因为每一行都是它自己的字符串,请查找作为该字符串一部分的位置目录(例如,C:…)。只需取出特定部分并存储在变量中

但每一行都要这样做

任何帮助都将不胜感激

TestRecID TestUserID 5 2017-04-20 TestTAtRec No 2.560 No C:\Test1\Test3 Tester
TestRecID TestUserID 5 2017-04-20 TestTAtRec No 2.560 No C:\Test2\Test2 Tester
TestRecID TestUserID 5 2017-04-20 TestTAtRec No 2.560 No C:\Test3\Test1 Tester
假设以上是文本文件中的每一行。 在行中的每个空格处,不同的列将出现在DB中

预期结果将是:

C:\Test1\Test3 --> Variable 1
C:\Test2\Test2 --> Variable 2
C:\Test3\Test1 --> Variable n
存储在某个变量中

对于Windows的Batch/Bash,我真的怎么强调也不过分

跟进问题:

for /f "tokens=9 delims= " %%a in (%findfile%) do echo %%a 
然后我想将%%a存储在变量名称中

我认为这将是一个:

for /f "tokens=9 delims= " %%a in (%findfile%) do echo %%a
set variable_name = %%a
但它不起作用

被回答了,但我在回答中问了一个问题

答案如下:

for /f "tokens=9 delims= " %%b in (%findfile%) do set "location=%%b"
编辑 用于获取唯一变量的工作循环(感谢@Stephen):

这是我正在使用的FFMPEG函数,但我现在需要它分别接收每个变量:

for %%i in (%_location%\*.mp4) do (if not exist "%%~ni\" MD "%%~ni"
    ffmpeg -i "%%i" -vframes 1 -f image2 -start_number 0 "%%~ni\%%~ni_Summary_%%3d.jpeg"
)

上面函数中的%\u location%部分是我的问题所在?当然,它不是一次获取多个变量,因为将整个输出存储到一个变量中是没有意义的,我假设,每行需要一个变量

@echo off
setlocal EnableDelayedExpansion
set n=0
for /f "tokens=9" %%a in (file.txt) do (
  set /a n+=1
  set _Var[!n!]=%%a
)
set _Var[
注意
do
后面的副词。这称为代码块,像单个命令一样进行解析和执行。(这就是你需要的原因)

编辑要删除重复项,您可以使用大量代码将(可能)新数据与每个已存在的变量进行比较,也可以使用一个奇怪的技巧:将数据用作变量名(并使用一些伪字符串作为值),这样每个重复项只会“覆盖”一个已存在的变量,然后在第二步中放入数据(现在是变量名)将值转换为变量

@echo off 
SetLocal EnableDelayedExpansion
REM clear variables:
for /f "delims==" %%a in ('set _') do set "%%a="
REM get locations from textfile:
for /f "tokens=9" %%a in (file.txt) do set "_%%a=yes"

REM translate into proper variables:
set count=0
echo on
for /f "tokens=1* delims==#" %%a in ('set _') do (
  set /a count+=1
  set x=%%a
  set _var[!count!]=!x:~1!
)
set _var

注意:由于扩展延迟,您的数据不应包含感叹号(
)。

显示文件片段和预期结果如果一行上存在多个路径,会发生什么情况?可以使用grep或awk(或其他)搜索文本(行)。可以使用grep、sed、awk(或其他)对匹配文本进行进一步筛选/替换。请更详细地描述您的问题。对于/f“tokens=8,*”%%a in(file.txt)do echo%%b或“`for/f”tokens=9”%%a in(file.txt),一行中不会有多个路径echo%%a`-取决于
Tester
是路径的一部分还是下一列。有没有办法只选择唯一的一个并将其存储在变量中?标记9处的变量是一个位置,通常会有不同的位置,然后将每个位置放入FFMPEG函数中,但就目前而言,它只是一个位置取出一个位置并将其传递给函数……我想知道的是,有没有一种方法可以让它只从它创建的列表中提取唯一的位置,并将它们存储在单独的变量中?然后将这些变量循环到FFMPEG函数中?@Stephen这是它给我的错误消息?“La variable d'environnement_u'n'est pas définie.do(était inattendu)。”这是因为试图清除不存在的变量。将('set u')do…中的
…更改为('set uuu2^>nul')do
中的
。在
do
之间需要一个空格(
。你真棒!成功了!我能让你看看上面编辑的问题中最后一件事吗??
@echo off 
SetLocal EnableDelayedExpansion
REM clear variables:
for /f "delims==" %%a in ('set _') do set "%%a="
REM get locations from textfile:
for /f "tokens=9" %%a in (file.txt) do set "_%%a=yes"

REM translate into proper variables:
set count=0
echo on
for /f "tokens=1* delims==#" %%a in ('set _') do (
  set /a count+=1
  set x=%%a
  set _var[!count!]=!x:~1!
)
set _var