I'm running Windows 10 and I have a batch file that changes the directory to the required location and a perl command that edits all text files in it by changing Enabled = 1 to Enabled = 0, but I can't figure out how to make the perl command check for subfolders.
@echo off
timeout 1 >nul 2>&1
cd /d D:
timeout 1 >nul 2>&1
cd "D:\MySettings"
timeout 1 >nul 2>&1
perl -wE "@ARGV = glob qq($ARGV[0]); $^I = qq(); while (<>) { s/Enabled =\K.*/ \x220\x22/g; print }" *.txt
Pause
CodePudding user response:
For this, I think it could be only done by perl commands, not in batch commands.
You can check here for more specific solutions
CodePudding user response:
For this to be done to files in subfolders, and (I presume) in sub-sub-folders, etc (recursively) -- you'd need to separate that list (glob
) of all "entries" into files and folders. Edit the files, and then repeat the process in folders.
There are libraries for that, of course. The core File::Find is a good recommendation; however, since you need to edit each file in a simple manner let's look at Path::Tiny, which has another convenient method
If you insist on a command-line program ("one-liner")
perl -MPath::Tiny -wE"
path(qq(.))->visit( sub {
my ($entry, $state) = @_;
return if not -T;
path($entry)->edit_lines( sub { s/.../.../ } )
},
{ recurse => 1 }
)"