Moving Group of Files to a Folder
Hi,
Can someone please help me.
I want to move a group of files to a folder and keep same file name.
Basically use the name of file before "_ddmmyyyy" to create a folder for that file and move all same group file to that folder.
example:
file1_ddmmyyy xxxxxxxx.jpg (where is ddmmyyyy is random day, date, year)
file1_ddmmyyy xxxxxxxx.jpg (where is ddmmyyyy is random day, date, year)
file2_ddmmyyy xxxxxxxx.jpg (where is ddmmyyyy is random day, date, year)
file2_ddmmyyy xxxxxxxx.jpg (where is ddmmyyyy is random day, date, year)
move all files above to file1 and file2 folders.
Thank you
Can someone please help me.
I want to move a group of files to a folder and keep same file name.
Basically use the name of file before "_ddmmyyyy" to create a folder for that file and move all same group file to that folder.
example:
file1_ddmmyyy xxxxxxxx.jpg (where is ddmmyyyy is random day, date, year)
file1_ddmmyyy xxxxxxxx.jpg (where is ddmmyyyy is random day, date, year)
file2_ddmmyyy xxxxxxxx.jpg (where is ddmmyyyy is random day, date, year)
file2_ddmmyyy xxxxxxxx.jpg (where is ddmmyyyy is random day, date, year)
move all files above to file1 and file2 folders.
Thank you
Use Batch mode: Move
Output folder: <Substr:1:"_">
Leave the Method List blank unless you want to rename the files at the same time as moving.
Output folder: <Substr:1:"_">
Leave the Method List blank unless you want to rename the files at the same time as moving.
Reply to #2:
Thank you for your help,
it doesn't working well for some files like:
file with double underline
file__ddmmyyyy_xxxx_xxxxxxxxxxxxxxx
or underline at front
_file_ddmmyyyy_xxxx_xxxxxxxxxx
but all files will have "_ddmmyyyy" after it.
example of "_ddmmyyyy" can be: _19102021
Thank you
Thank you for your help,
it doesn't working well for some files like:
file with double underline
file__ddmmyyyy_xxxx_xxxxxxxxxxxxxxx
or underline at front
_file_ddmmyyyy_xxxx_xxxxxxxxxx
but all files will have "_ddmmyyyy" after it.
example of "_ddmmyyyy" can be: _19102021
Thank you
Reply to #3:
Use Batch mode Rename with a Script method:
folder = item.name.match(/^_?([^_]*)/)[1];
item.newPath = item.path + folder;
Use Batch mode Rename with a Script method:
folder = item.name.match(/^_?([^_]*)/)[1];
item.newPath = item.path + folder;
Reply to #4:
Hi David,
Thank you for taking your time to help me.
your script was working but the result not as I expected.
can you make a script that can make a folder with a name of file before _ddmmyyyy and move all those group of files to that folder?
example with files:
_hello_12122021_1820_testing
_hello_15072021_1213_WORD
hello__12092021_2720_FOR TESTING
hello__19042021_2230_testing
hello_car_12102021_3085_ WHITE
hello_car_25122021_6454_RED
So there will be 3 group of files name and create a folder by those name:
_hello
hello_
hello_car
Thank you
Hi David,
Thank you for taking your time to help me.
your script was working but the result not as I expected.
can you make a script that can make a folder with a name of file before _ddmmyyyy and move all those group of files to that folder?
example with files:
_hello_12122021_1820_testing
_hello_15072021_1213_WORD
hello__12092021_2720_FOR TESTING
hello__19042021_2230_testing
hello_car_12102021_3085_ WHITE
hello_car_25122021_6454_RED
So there will be 3 group of files name and create a folder by those name:
_hello
hello_
hello_car
Thank you
Reply to #5:
Does this do what you want?
folder = item.name.match(/^.*?(?=_+\d{8})/);
item.newPath = item.path + folder;
Does this do what you want?
folder = item.name.match(/^.*?(?=_+\d{8})/);
item.newPath = item.path + folder;
Reply to #6:
Hi David,
Thank you for fast reply.
your code working much better, but still not exactly what I need.
it will not work for files like this:
hello__12092021_2720_FOR TESTING (2 underscore between "o and 1")
mycar____27052021_3515 YELLOW (4 underscore between "r and 2")
the code only create folders without any underscore:
hello
mycar
instead of:
hello_ (1 underscore after "o")
mycar___ (3 underscore after "r")
Thank you for your help.
Hi David,
Thank you for fast reply.
your code working much better, but still not exactly what I need.
it will not work for files like this:
hello__12092021_2720_FOR TESTING (2 underscore between "o and 1")
mycar____27052021_3515 YELLOW (4 underscore between "r and 2")
the code only create folders without any underscore:
hello
mycar
instead of:
hello_ (1 underscore after "o")
mycar___ (3 underscore after "r")
Thank you for your help.
Reply to #7:
folder = item.name.match(/^.*?(?=_\d{8})/);
item.newPath = item.path + folder;
folder = item.name.match(/^.*?(?=_\d{8})/);
item.newPath = item.path + folder;
Reply to #8:
Hi David,
You are AMAZING. I don't understand the code, but it work 100%
I just purchased full version.
Thank you very much for your super help. :)
Hi David,
You are AMAZING. I don't understand the code, but it work 100%
I just purchased full version.
Thank you very much for your super help. :)
Reply to #9:
Actually the following, slightly simpler, line of code also works:
folder = item.name.match(/^.*(?=_\d{8})/);
"item.name" simply returns the original filename as a string and the "match" method will try to match the string that is defined in the argument of the method.
This could be a simple quoted string in which case, for example: "filename".match("lena") would return the string "lena".
However, in our case, we are using a Regular Expression as the argument, which is defined by enclosing it in "/" characters rather than quotes.
So to explain the regex /^.*(?=_\d{8})/ :
Regex uses "metacharacters" ie characters that have special meanings for example "." will match any character (incidentally if we really want a full stop to have its normal meaning in the regex we have to "escape" the character using "\" - ie as "\.")
"*" indicates any number of repetitions of the preceding character (including zero) and "^" signifies the start of the string. Thus "^.*" will match any string starting from the beginning of the filename, which on its own would simply return the entire filename.
However the construction (?=str) - known as a "positive lookahead" - specifies that the preceding match must be followed by the pattern defined by "str" - which in this case is "_\d{8}"
Here the metacharacter \d specifies a decimal digit and {8} means that the preceding character must be repeated a total of 8 times.
Thus the match will return all the characters from the beginning of the filename, stopping just before it encounters an underscore followed by the 8-digit date string.
Actually the following, slightly simpler, line of code also works:
folder = item.name.match(/^.*(?=_\d{8})/);
"item.name" simply returns the original filename as a string and the "match" method will try to match the string that is defined in the argument of the method.
This could be a simple quoted string in which case, for example: "filename".match("lena") would return the string "lena".
However, in our case, we are using a Regular Expression as the argument, which is defined by enclosing it in "/" characters rather than quotes.
So to explain the regex /^.*(?=_\d{8})/ :
Regex uses "metacharacters" ie characters that have special meanings for example "." will match any character (incidentally if we really want a full stop to have its normal meaning in the regex we have to "escape" the character using "\" - ie as "\.")
"*" indicates any number of repetitions of the preceding character (including zero) and "^" signifies the start of the string. Thus "^.*" will match any string starting from the beginning of the filename, which on its own would simply return the entire filename.
However the construction (?=str) - known as a "positive lookahead" - specifies that the preceding match must be followed by the pattern defined by "str" - which in this case is "_\d{8}"
Here the metacharacter \d specifies a decimal digit and {8} means that the preceding character must be repeated a total of 8 times.
Thus the match will return all the characters from the beginning of the filename, stopping just before it encounters an underscore followed by the 8-digit date string.
Reply to #10:
Hi David,
Thank you for taking time to explain it to me.
you are genius :)
Hi David,
Thank you for taking time to explain it to me.
you are genius :)