Windows 使用批处理脚本编辑多个文件夹中多个文本文件每行的第一个单词

Windows 使用批处理脚本编辑多个文件夹中多个文本文件每行的第一个单词,windows,batch-file,command-prompt,Windows,Batch File,Command Prompt,我在多个文件夹中有多个文本文件。 在每个文本文件中,它由以下内容组成: 0 0.211328 0.386111 0.088281 0.197222 3 0.283984 0.319444 0.067969 0.161111 2 0.387109 0.514583 0.102344 0.112500 我想将每行的第一个数字编辑为0,如下所示 0 0.211328 0.386111 0.088281 0.197222 0 0.283984 0.319444 0.067969 0.161111 0

我在多个文件夹中有多个文本文件。 在每个文本文件中,它由以下内容组成:

0 0.211328 0.386111 0.088281 0.197222
3 0.283984 0.319444 0.067969 0.161111
2 0.387109 0.514583 0.102344 0.112500
我想将每行的第一个数字编辑为0,如下所示

0 0.211328 0.386111 0.088281 0.197222
0 0.283984 0.319444 0.067969 0.161111
0 0.387109 0.514583 0.102344 0.112500
   D:
    ├───Folder-A
    │   ├───folder-1
    │   │   ├──1.txt
    │   │   ├──2.txt
    │   │   └──3.txt
    │   └───folder-2
    │       ├──a.txt
    │       └──b.txt
    │
    └───Folder-B
        ├───folder-x
        │   ├──8.txt
        │   ├──9.txt
        │   └──10.txt
        └───folder-y
            ├──y.txt
            └──z.txt
到目前为止,在通过堆栈溢出进行搜索之后,我成功地使用这个脚本编写了代码

@echo off
setlocal EnableDelayedExpansion
FOR /L %y IN (1,1,10000) DO IF EXISTS %y.txt (
    (for /F "tokens=1*" %a in (%y.txt) do (
        FOR /F %c IN ("!var:~0,1!") DO echo 0 %b 
        )
    )
) >%y_.txt
但是,这仅在my.txt文件名为数字时有效。我将范围设置为10000,因为我正在一个文件夹中处理数千个文本文件。并且,这段代码创建了一个名为%y_uuu.txt的新文本文件,其中%y包含被访问文件的名称,我添加了u以避免文件名混淆

我可能需要新文本文件来替换同名的旧文本文件,但使用%y作为新文件名不起作用

等等,不仅仅是这样

我还可能需要编辑位于该文件夹上方文件夹中的所有其他.txt文件。树文件夹看起来很像这样

0 0.211328 0.386111 0.088281 0.197222
0 0.283984 0.319444 0.067969 0.161111
0 0.387109 0.514583 0.102344 0.112500
   D:
    ├───Folder-A
    │   ├───folder-1
    │   │   ├──1.txt
    │   │   ├──2.txt
    │   │   └──3.txt
    │   └───folder-2
    │       ├──a.txt
    │       └──b.txt
    │
    └───Folder-B
        ├───folder-x
        │   ├──8.txt
        │   ├──9.txt
        │   └──10.txt
        └───folder-y
            ├──y.txt
            └──z.txt
前面的代码仅在我位于特定文件夹目录中且不进入子文件夹时才有效。 我试着使用
dir/b/s*.txt
,但我不确定该放在哪里


我希望有人能帮我。顺便说一下,这是我第一次使用批处理脚本,也是我作为研究生实习生的第一项任务。感谢您的帮助:D

这将递归地遍历子目录,找到所有
.txt
文件,并将每行中的第一项替换为
0

@echo off
for /f "delims=" %%a in ('dir /b /s /a-d *.txt') do (
    for /f "tokens=1*" %%i in ('type %%~a') do (
     (echo 0 %%j)>>"%%~dpna.tm"
  )
   if exist "%%~dpna.tm" move /Y "%%~dpna.tm" "%%~fa"
 )

运行此操作前请注意!这将使用原始目录的内容创建一个临时文件,一旦进行了相关更改,它会将该文件重命名为原始文件(从临时文件),因此请不要在产品环境中运行该文件,直到您在虚拟目录的所有级别都需要临时文本文件的虚拟目录中对其进行测试,否则,将用
0

@echo off
for /f "delims=" %%a in ('dir /b /s /a-d *.txt') do (
    for /f "tokens=1*" %%i in ('type %%~a') do (
     (echo 0 %%j)>>"%%~dpna.tm"
  )
   if exist "%%~dpna.tm" move /Y "%%~dpna.tm" "%%~fa"
 )


您可能还希望在脚本的
@echo off
之后添加
pushd“C:\somedir”
,并在脚本的末尾添加
popd
,以确保它在您希望它运行的目录下运行。

谢谢,这很好。你能解释一下%%dpna和%%fa吗?它有什么作用?这个标志代表什么?因为如果要移动和替换现有文件,此代码将提示。我不能处理提示,因为prod env类似于许多文件。谢谢:)您可以通过运行/?从
cmd
但是
%%~dpna
扩展文件的驱动器、路径和名称,不包括扩展名,这样我们就可以创建一个新的tmp扩展名来进行更改
%%~fa
是整个文件路径。只需在move命令的末尾添加
/Y
,即可停止命令的提示,更新答案即可演示。