Windows 按目录中的文件名设置值
嗨,我想为一个目录中的所有文本文件设置值Windows 按目录中的文件名设置值,windows,batch-file,cmd,Windows,Batch File,Cmd,嗨,我想为一个目录中的所有文本文件设置值infle,这意味着我想让批处理文件逐个加载并对目录中的所有文本文件执行命令 通常,我只是复制命令,然后用每个文件名替换infle。通过这段代码,我得到文件名,然后替换它们 cd /d "dir" dir /a /b /-p /o:gen >names.txt 下面是一个命令示例 @Echo OFF REM Set These Variables SET "InFile=123.txt" SET "OutFile=NowLoad.txt" SET
infle
,这意味着我想让批处理文件逐个加载并对目录中的所有文本文件执行命令
通常,我只是复制命令,然后用每个文件名替换infle
。通过这段代码,我得到文件名,然后替换它们
cd /d "dir"
dir /a /b /-p /o:gen >names.txt
下面是一个命令示例
@Echo OFF
REM Set These Variables
SET "InFile=123.txt"
SET "OutFile=NowLoad.txt"
SET "Replace=KK"
SET "ReplaceWith=JJ"
REM Get Total Lines Number [including empty lines]
FOR /F %%A IN ('TYPE "%InFile%"^|find /v /c ""') DO SET "Till=%%A"
REM Create The OutFile with changes
SETLOCAL EnableDelayedExpansion
<"!InFile!" (
FOR /L %%a IN (1 1 0) DO SET /p "="
FOR /L %%A IN (1 1 %Till%) DO (
SET "line="
SET /P "line="
IF "!line!x" == "x" ( Echo.
) ELSE ( Echo !line:%Replace%=%ReplaceWith%!)
)
)>>"%OutFile%"
ENDLOCAL
@Echo关闭
REM设置这些变量
设置“infle=123.txt”
设置“OutFile=NowLoad.txt”
设置“替换=KK”
设置“ReplaceWith=JJ”
REM获取总行数[包括空行]
对于中的/F%%A('TYPE”%infle%%“^ | find/v/c”“),请设置“Till=%%A”
REM创建带有更改的输出文件
SETLOCAL EnableDelayedExpansion
>“%OutFile%”
端部
无需计算行数,只需处理每行:
setlocal enabledelayedexpansion
for %%f in (*.txt) do (
( for /f "delims=" %%A in (%%f) do (
set line=%%A
set line=!line:%Replace%=%ReplaceWith%!
echo(!line!
)
)>%%~nf.out
)
注意:(echo
之后的处理空行(如果!line!
为空,则写空行时不带“echo is off”)
编辑以处理文件夹中的所有.txt文件。由于固定的%oufile%会在每次处理填充时覆盖相同的输出文件,因此我将其更改为新的扩展名:.out
另一种方式
你的脚本是DOIT.bat
更改DOIT.bat以对要处理的文件名使用命令行参数
@Echo OFF
REM Set These Variables
SET "InFile=%~1"
SET "OutFile=NowLoad.txt"
...
创建另一个名为CALLIT.bat的文件
@ECHO OFF
FOR /F "usebackq tokens=*" %%f IN (`dir /b *.txt`) DO (
CALL DOIT.bat "%%~f"
)
运行CALLIT.bat将处理目录中的每个.txt文件。谢谢,但这只是一个示例,我想将文件名设置为值。这只是一个示例。@kmthrongkmthrongi如果您不给出准确的示例,那么您通常不会得到可行的解决方案。这是一种编程语言,需要特定的细节来编写精确的代码。@foxidrive同意你的观点,但这次我解释了所有显而易见的事情,示例没有任何问题,我的意思是,我试图通过每次设置值并运行脚本来解算它,但dude Stephan用另一种方式解了它。我刚才说了TNX,但我需要它使用我编写的方法(通过设置值)@Stephan抱歉和tnx我刚看到编辑,现在我尝试了,它没有做任何特殊的事情,只是用JJ替换KK,我可以用我的代码来做。我的问题是,我想对文件夹中的所有文本文件做一些其他的事,但你的代码只与%infle%一起工作。你能解释一下吗?因为我什么都做不了有了tnx。@Paul我说的正是names.txt,我不能使用它,所以我只是复制命令。例如,我在一个文件夹中有3个txt文件,所以我复制代码并粘贴3次。然后,对于每个命令,我使用names.txt中的名称,在每个命令中替换%infle%。我想使用批处理文件在第二个原因是我疯狂的方法花费了太多的时间。我认为你的命令dir/a/b/-po:gen
不正确。你必须阅读如何提问。因为我在读了“我想将值infle设置为dir中的所有文本文件”后迷路了,其中批处理中使用了names.txt
?@Paul:我认为该命令可能写得更短,但没有真正的错误。