Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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 使脚本成批读取子文件夹_Batch File - Fatal编程技术网

Batch file 使脚本成批读取子文件夹

Batch file 使脚本成批读取子文件夹,batch-file,Batch File,所以我一直在写这个脚本 @echo off Setlocal enabledelayedexpansion cd /d "%~dp0" Set "Pattern1=(1)" Set "Replace1=(-125)" For %%a in (*.txt) Do ( Set "File=%%~a" Ren "%%a" "!File:%Pattern1%=%Replace

所以我一直在写这个脚本

@echo off
Setlocal enabledelayedexpansion
cd /d "%~dp0"

Set "Pattern1=(1)"
Set "Replace1=(-125)"

For %%a in (*.txt) Do (
    Set "File=%%~a"
    Ren "%%a" "!File:%Pattern1%=%Replace1%!"
)
我一直在尝试从许多其他文件夹和子文件夹的主文件夹读取它
而我只是不断得到Sytex错误
我正在尝试将文件名(1)中包含此项的所有.txt文件重命名为(-125)
现在,我的脚本直接放在文件的文件夹中时效果很好,但我有1000多个文件夹和子文件夹,所以我需要它从主文件夹读取

我尝试了许多不同的方法,但没有一种有效
测试1:

FOR /f "delims=" %%a IN ('dir /b /s /a-d "*.txt"') DO (
    Set "File=%%~a"
    Ren "%%a" "!File:%Pattern1%=%Replace1%!"
)
测试2:

FOR /f %%a IN ('dir /b /s /a-d "*.txt"') DO (
    Set "File=%%~a"
    Ren "%%a" "!File:%Pattern1%=%Replace1%!"
)
测试3:

FOR %%a IN ('dir /b /s /a-d "*.txt"') DO (
    Set "File=%%~a"
    Ren "%%a" "!File:%Pattern1%=%Replace1%!"
)
还有其他几种方法,但我得到的只是无响应或Syntex错误

有人能帮我看看我的错误在哪里吗

另外,如果没有太多问题,是否有办法使此脚本成为多文件名转换器

这就是我所拥有和正在做的

(1) Houston.txt it gets renamed to (-125) Houston.txt
(2) Austin.txt it gets renamed to (-120) Austin.txt
(3) Dallas.txt it gets renamed to (-89) Dallas.txt
我有大约110个.txt文件,使用这一个脚本,我必须创建110个脚本来更改所有txt文件,是否有方法将所有110个文件添加到一个脚本中,需要一个通配符,因为所有文件夹和子文件夹都有不同的文件名

好的,所以我设法将我的110个脚本转换为1个脚本,但是脚本非常长

这就是我现在拥有它的方式。我不想在这里列出我想要简短的整个脚本

@echo off
Setlocal enabledelayedexpansion
cd /d "%~dp0"

Set "Pattern1=(1)"
Set "Replace1=(-125)"
Set "Pattern2=(2)"
Set "Replace2=(-124)"
Set "Pattern3=(3)"
Set "Replace3=(-121)"
Set "Pattern4=(4)"
Set "Replace4=(-117)"
Set "Pattern5=(5)"
Set "Replace5=(-120)"
Set "Pattern6=(6)"
Set "Replace6=(-116)"

FOR /f "delims=" %%a IN ('dir /b /s /a-d "*.txt"') DO (
    Set "File=%%~na"
    Ren "%%a" "!File:%Pattern1%=%Replace1%!%%~xa"
    Ren "%%a" "!File:%Pattern2%=%Replace2%!%%~xa"
    Ren "%%a" "!File:%Pattern3%=%Replace3%!%%~xa"
    Ren "%%a" "!File:%Pattern4%=%Replace4%!%%~xa"
    Ren "%%a" "!File:%Pattern5%=%Replace5%!%%~xa"
    Ren "%%a" "!File:%Pattern6%=%Replace6%!%%~xa"
这是重新命名文件的第二个脚本

@echo off
Setlocal enabledelayedexpansion
cd /d "%~dp0"

Set "Replace1=(1)"
Set "Pattern1=(-125)"
Set "Replace2=(2)"
Set "Pattern2=(-124)"
Set "Replace3=(3)"
Set "Pattern3=(-121)"
Set "Replace4=(4)"
Set "Pattern4=(-117)"
Set "Replace5=(5)"
Set "Pattern5=(-120)"
Set "Replace6=(6)"
Set "Pattern6=(-116)"

FOR /f "delims=" %%a IN ('dir /b /s /a-d "*.txt"') DO (
    Set "File=%%~na"
    Ren "%%a" "!File:%Pattern1%=%Replace1%!%%~xa"
    Ren "%%a" "!File:%Pattern2%=%Replace2%!%%~xa"
    Ren "%%a" "!File:%Pattern3%=%Replace3%!%%~xa"
    Ren "%%a" "!File:%Pattern4%=%Replace4%!%%~xa"
    Ren "%%a" "!File:%Pattern5%=%Replace5%!%%~xa"
    Ren "%%a" "!File:%Pattern6%=%Replace6%!%%~xa"

提前感谢

ren的目标仅为文件名-不允许包含文件夹信息。请尝试
%~na
%~nxa
顺便说一句,您也可以在PowerShell中执行此操作,例如
获取ChildItem-Filter'(1)*.txt'-File-Recurse-Rename-Item-NewName{($\uName.)。替换(“(1)”,(-125)}
,并从批处理文件中执行
%SystemRoot%\System32\WindowsPowerShell\v1.0\PowerShell.exe-RofNoFile-命令“获取ChildItem-Filter'(1)*.txt'-File-Recurse | Rename Item-NewName{($..Name).Replace(“(1)”,(.125)”}“
。谢谢,Compo我不知道如何设置Powershell,我会尝试,但从未尝试过it@Stephan-因此,这将有助于使其成为SubFolders@JavierRivas,Stephan的意思是,
Set“File=%%~na”
Ren“%%a”!File:%Pattern1%=%Replace1%!%%~xa
,或
设置“文件=%%~nxa”
Ren“%%a”!文件:%Pattern1%=%Replace1%!”
。至于您的主命令,我建议您使用
for/f“delims=“%%a IN('dir/b/s/a-d“*.txt“')(
是其中最好的一个,请注意它在当前工作目录中递归,因此您应该真正定义它,或者将
*.txt
更改为
“P:\athTo\*.txt”