при добавлении префикса к указанным файлам с использованием командного файла он добавляет префикс два раза для первого файла из-за скобки '[]'

я пытаюсь добавить префикс ко всем файлам в cur dir и sub dir, и мне это удается, используя следующий код:

@echo off
pushd "D:\z.Temp\Test\"
for /r %%j in (*) do (
   rename "%%j" "[nilesh.uk.to]-%%~nxj"
)
popd

Но когда я пытаюсь добавить префикс для конкретных типов файлов, таких как:

@echo off
pushd "D:\z.Temp\Test\"
for /r %%j in (*.html *.js) do (
   rename "%%j" "[nilesh.uk.to]-%%~nxj"
)
popd

он работает, но он дает мне вывод, например:

demo1.html  -->  [nilesh.uk.to]-[nilesh.uk.to]-demo1.html
demo2.html  -->  [nilesh.uk.to]-demo2.html
demo3.html  -->  [nilesh.uk.to]-demo3.html

demo1.js  -->  [nilesh.uk.to]-[nilesh.uk.to]-demo1.js
demo2.js  -->  [nilesh.uk.to]-demo2.js
demo3.js  -->  [nilesh.uk.to]-demo3.js

Здесь каждый первый файл добавляет префикс два раза

И если я удалю [] с nilesh.uk.to, то он работает отлично, но я хочу префикс как [nilesh.uk.to], пожалуйста, frendz, скажите мне, что делать....


person Nilesh12    schedule 18.10.2013    source источник


Ответы (2)


Проблема в том, что переименованные файлы можно найти и переименовать второй раз.

Добавьте ECHO rename "%%j" "[nilesh.uk.to]-%%~nxj" в свой код, и вы увидите что-то вроде

переименовать "C:\temp\bracket\demo1.txt" "[nilesh.uk.to]-demo1.txt" переименовать "C:\temp\bracket\demo2.txt" "[nilesh.uk.to]-demo2. txt" переименовать "C:\temp\bracket\demo3.txt" "[nilesh.uk.to]-demo3.txt" переименовать "C:\temp\bracket[nilesh.uk.to]-demo1.txt" "[ nilesh.uk.to]-[nilesh.uk.to]-demo1.txt"

Поэтому вам нужно заставить цикл FOR брать каждый файл только один раз.

Вы можете изменить его на

for /F "delims=" %%j in ('dir /s /b *.html') do (
....

Это работает, так как dir /s /b *.html будет полностью выполнено до того, как будет выполнена первая команда переименования.

person jeb    schedule 18.10.2013

Я не знаю, но я сделаю предположение. У меня есть некоторые основания полагать, что это хорошая догадка. Удалите скобки (скобки ()) и поместите команды в одну строку.

Если вы это сделаете, а скрипт по-прежнему не работает, я посмотрю внимательно.

person David Candy    schedule 18.10.2013
comment
Без проверки могу сказать, что проблема не в () - person jeb; 18.10.2013